idea中原生Servlet3.0开发之---使用配置类和注解的方式整合SpringMVC
以注解方式来启动SpringMVC前需了解的基础知识:
1、web容器在启动的时候,会扫描每个jar包下的META-INF/services/javax.servlet.ServletContainerInitializer
2、加载这个文件指定的类SpringServletContainerInitializer
3、spring的应用一启动会加载感兴趣的WebApplicationInitializer接口的下的所有组件;
4、并且为WebApplicationInitializer组件创建对象(组件不是接口,不是抽象类)
1)、AbstractContextLoaderInitializer:创建根容器;createRootApplicationContext();
2)、AbstractDispatcherServletInitializer:
创建一个web的ioc容器;createServletApplicationContext();
创建了DispatcherServlet;createDispatcherServlet();
将创建的DispatcherServlet添加到ServletContext中;
getServletMappings();
3)、AbstractAnnotationConfigDispatcherServletInitializer:注解方式配置的DispatcherServlet初始化器
创建根容器:createRootApplicationContext()
getRootConfigClasses();传入一个配置类
创建web的ioc容器: createServletApplicationContext();
获取配置类;getServletConfigClasses();
===========================
总结:
以注解方式来启动SpringMVC;继承AbstractAnnotationConfigDispatcherServletInitializer;
实现抽象方法指定DispatcherServlet的配置信息;
===========================
定制SpringMVC;
1)、@EnableWebMvc:开启SpringMVC定制配置功能;相当于web.xml中配置的 <mvc:annotation-driven/>;
2)、配置组件(视图解析器、视图映射、静态资源映射、拦截器。。。)
extends WebMvcConfigurerAdapter
===========================
springmvc父子容器:
各自负责一些扫描的包
父容器:功能类的包,如:Controller,前端控制器,视图解析器
子容器:业务模块的包,如:service,repositories,数据库事物
使用配置类和注解的方式整合SpringMVC的实例步骤:
一、导入servlet和springmvc的jar包
[code]<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.atguigu</groupId> <artifactId>springmvc-annotation</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>4.3.11.RELEASE</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>3.0-alpha-1</version> <scope>provided</scope> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-war-plugin</artifactId> <version>2.4</version> <configuration> <failOnMissingWebXml>false</failOnMissingWebXml> </configuration> </plugin> </plugins> </build> </project>
二、创建MyWebAppInitializer .java相当于web.xml文件
并继承抽象类AbstractAnnotationConfigDispatcherServletInitializer(具体可看博文开始时描述)
此类相当于web.xml;加载spring和springmvc,并设置拦截
[code]package com.atguigu; import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer; import com.atguigu.config.AppConfig; import com.atguigu.config.RootConfig; //web容器启动的时候创建对象;调用方法来初始化容器以前前端控制器 public class MyWebAppInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { //获取根容器的配置类;(Spring的配置文件) 父容器; @Override protected Class<?>[] getRootConfigClasses() { // TODO Auto-generated method stub return new Class<?>[]{RootConfig.class}; } //获取web容器的配置类(SpringMVC配置文件) 子容器; @Override protected Class<?>[] getServletConfigClasses() { // TODO Auto-generated method stub return new Class<?>[]{AppConfig.class}; } //获取DispatcherServlet的映射信息 // /:拦截所有请求(包括静态资源(xx.js,xx.png)),但是不包括*.jsp; // /*:拦截所有请求;连*.jsp页面都拦截;jsp页面是tomcat的jsp引擎解析的; @Override protected String[] getServletMappings() { // TODO Auto-generated method stub return new String[]{"/"}; } }
三、创建spring的配置文件RootConfig.java,即父容器
[code]package com.atguigu.config; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Controller; //Spring的容器不扫描controller;父容器 @ComponentScan(value="com.atguigu",excludeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class}) }) public class RootConfig { }
四、创建springmvc的配置文件AppConfig.java,即子容器
[code]package com.atguigu.config; import java.util.List; import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.ComponentScan.Filter; import org.springframework.context.annotation.FilterType; import org.springframework.stereotype.Controller; //SpringMVC只扫描Controller;子容器 //useDefaultFilters=false 禁用默认的过滤规则; @ComponentScan(value="com.atguigu",includeFilters={ @Filter(type=FilterType.ANNOTATION,classes={Controller.class}) },useDefaultFilters=false) public class AppConfig { }
五、 框架搭建好后,创建controller和service等业务代码,进行测试
HelloController.java
[code]package com.atguigu.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseBody; import com.atguigu.service.HelloService; @Controller public class HelloController { @Autowired HelloService helloService; @ResponseBody @RequestMapping("/hello") public String hello(){ String hello = helloService.sayHello("tomcat.."); return hello; } }
HelloService.java
[code]package com.atguigu.service; import org.springframework.stereotype.Service; @Service public class HelloService { public String sayHello(String name){ return "Hello "+name; } }
六、运行tomcat测试
说明:controller能访问到,并且能调用service,说明springmvc配置成功
阅读更多
- JAVAWEB开发之SpringMVC详解(一)——SpringMVC的框架原理、架构简介、与mybatis整合和注解方式的使用、
- JAVAWEB开发之SpringMVC详解(一)——SpringMVC的框架原理、架构简介、与mybatis整合和注解方式的使用、
- 从零开始学JAVA(09)-使用SpringMVC4 + Mybatis + MySql 例子(注解方式开发)
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- Java Web学习总结48:模拟Servlet3.0使用注解的方式配置Servlet
- SpringMVC使用注解方式配置IOC
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- SpringMVC和FreeMarker整合中使用注解方式的后台数据校验validate(部分自己扩展)
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- JavaWeb中使用Springmvc(注解方式)开发步骤
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- JavaEE_Mybatis_SpringMVC_框架整合_lesson1_简单的SSM框架搭建_使用原始Dao开发方式进行测试
- 模拟Servlet3.0使用注解的方式配置Servlet
- JavaWeb学习总结(四十八)——模拟Servlet3.0使用注解的方式配置Servlet
- [java][servlet]模拟Servlet3.0使用注解的方式配置Servlet
- 使用注解方式开发SpringMVC