SpringMVC概述
SpringMVC技术与Servlet技术功能等同,均属于web层开发技术
SpringMVC是一种基于Java实现MVC模型的轻量级Web框架
SpringMVC是一种表现层框架技术
SpringMVC用于进行表现层功能开发
优点:
- 使用简单,相比于Servlet开发便捷
- 灵活性强
SpringMVC入门案例
1、使用SpringMVC技术需要先导入Spr ingMVC坐标与Servlet坐标
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.2.10.RELEASE</version>
</dependency>
2、开发SpringMVC控制器类(等同于Servlet功能)
//定义controller
//使用@Controller定义Bean
@Controller
public class UserController {
//设置当前操作的访问路径
@RequestMapping("/save")
//设置当前操作的返回值类型
@ResponseBody
public String save(String name){
System.out.println("spingmvc save name ==>"+name);
return "{'module:'springmvc save''}";
}
}
3、初始化SpringMVC环境(同Spring环境),设定SpringMVC加载对 应的bean
这个SpringMVC配置类其实等于之前的SpringConfig配置类。
4、初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
//定义一个servlet容器启动的配置类,在里面加载spring的配置
public class ServletContainerInitConfig extends AbstractDispatcherServletInitializer {
//加载springMVC配置类
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext ctx = new AnnotationConfigWebApplicationContext();
ctx.register(SpringMvcConfig.class);
return ctx;
}
//设置哪些请求归属springMVC处理
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
//加载spring容器的配置
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
5、加载tomcat7插件
<build>
<plugins>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.1</version>
<configuration>
<port>80</port>
<path>/</path>
</configuration>
</plugin>
</plugins>
</build>
6、启动测试
SpringMVC入门程序开发总结(1+N)
- 一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包, 加载Controller控制器bean)
- 多次工作
- 定义处理请求的控制器类
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping) 与返回json数据 (@ResponseBody)
入门案例工作流程分析
- 启动服务器初始化过程
- 服务器启动,执行ServletContainersInitConfig类, 初始化web容器
- 执行createServletApplicationContext方法,创建了WebApplicationContext对象
- 加载SpringMcConfig
- 执行@ComponentScan加载对应的bean
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法
- 执行getServletMappings方法,定义所有的请求都通过SpringMVC
- 单次请求过程
- 发送请求localhost/save
- web容器发现所有请求都经过SpringMVC ,将请求交给SpringMVC处理
- 解析请求路径/save
- 由/ save匹配执行对应的方法save()
- 执行save()
- 检测到有@ResponseBody直接将save( )方法的返回值作为响应求体返回给请求方
Controller加载控制与业务bean加载控制
- SpringMVC相关bean (表现层bean)
- Spring控制的bean
- 业务bean (Service)
- 功能bean (DataSource等)
- SpringMVC相关bean加载控制
- SpringMVC加载的bean对应的包均在com. hyk. controller包内
- Spring相关bean加载控制
- 方式一: Spring加载的bean设定3描范围为com. hyk,排除掉controller包内的bean
- 方式二: Spring加载的bean设定扫描范围为精准范围,例如service包、dao包等
- 方式三:不区分Spring和Springmvc的环境,加载到同一个环境中
替换成更简单:继承类:AbstractAnnotationConfigDispatcherServletInitializer
public class ServletContainerInitConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[]{SpringConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[]{SpringMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}