Appearance
1. SpringMVC概述
- SpringMVC是一种基于 JAVA 实现 MVC 模型的轻量级 Web 框架
- 优点:
- 使用简单,开发便捷(相比于Servlet)
- 灵活性强
2.SpringMVC的使用
- 导入 SpringMVC 坐标与 Servlet 坐标
properties
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>5.3.20</version>
</dependency>
- 创建 SpringMVC 控制器类(等同于 Servlet 功能)
java
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("springmvc save......");
return "{'msg':'save'}";
}
}
- 初始化 SpringMVC 环境,设定 SpringMVC 加载对应的 bean
java
@Configuration
@ComponentScan("com.my.controller")
public class SpringMvcConfig {
}
- 初始化Servlet容器,加载SpringMVC环境,并设置SpringMVC技术处理的请求
java
public class SpringMvcContextInitConfig extends AbstractDispatcherServletInitializer {
@Override
protected WebApplicationContext createServletApplicationContext() {
AnnotationConfigWebApplicationContext acwac=new AnnotationConfigWebApplicationContext();
acwac.register(SpringMvcConfig.class);
return acwac;
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
@Override
protected WebApplicationContext createRootApplicationContext() {
return null;
}
}
3.SpringMVC总结
一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建 Web 容器启动类,加载 SpringMVC 配置,并设置 SpringMVC请求 SpringMVC 请求拦截路径
- SpringMVC 核心配置类,设置配置类,扫描 controller 包,加载Controller 控制器 bean
多次工作
- 定义处理请求的控制器类
- 定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody)
4.工作流程
启动服务器初始化过程
- 服务器启动,执行自定义配置类,初始化 web 容器
- 执行 createServletApplicationContext 方法,创建了webApplicationContext 对象
- 加载 SpringMvcConfig 配置类
- 执行 @ComponentScan 加载对应的 bean
- 加载自定义 Controller 类,每个 @RequestMapping 的名称对应一个具体的方法
- 执行 getServletMappings 方法,定义所有的请求都通过 SpringMVC
单次请求过程
- 发送请求 localhost/路径名
- web 容器发现所有请求都经过 SpringMVC,将请求交给 SpringMVC处理
- 解析请求路径/路径名
- 由 /路径名 匹配执行对应的方法(方法名())
- 执行方法
- 检测有 @ResponseBody 直接将 方法 的返回值作为响应体返回给请求方
5.bean的加载控制
SpringMVC 相关的 bean(表现层)
Spring 控制的 bean
- 业务bean(Service)
- 功能bean(DataSource 等)
SpringMVC 相关的 bean 加载控制
- SpringMVC 加载的 bean 对应的包均在 com.my.controller 包内
Spring 相关的 bean 加载控制
方式一:Spring 加载的 bean 设定扫描范围为 com.my ,排除controller 包内的 bean
java@Configuration @ComponentScan(value = "com.my", excludeFilters = @ComponentScan.Filter( type = FilterType.ANNOTATION, classes = Controller.class ) ) public class SpringConfig { }
- excludeFilters :排除扫描路径中加载的 bean,需要指定类别( type )与具体项( classes )
- includeFilters :加载指定的 bean,需要指定类别( type )与具体项( classes )
方式二:Spring 加载的 bean 设定扫描范围为精准范围,com.my.service 等
方式三:不区分 Spring 与 SpringMVC 的环境,加载到同一个环境中