目录
- 1.入门案例总结
- [2. 入门案例工作流程分析](#2. 入门案例工作流程分析)
-
- [2.1 启动服务器初始化过程](#2.1 启动服务器初始化过程)
- [2.2 单次请求过程](#2.2 单次请求过程)
欢迎大家回到《Java教程之Spring30天快速入门》,本教程所有示例均基于Maven实现,如果您对Maven还很陌生,请移步本人的博文《如何在windows11下安装Maven并配置以及 IDEA配置Maven环境》,本文的上一篇为《SpringMVC入门案例代码示例》
1.入门案例总结
SpringMVC入门程序开发总结(1+N)
- 一次性工作
- 创建工程,设置服务器,加载工程
- 导入坐标
- 创建web容器启动类,加载SpringMVC配置,并设置SpringMVC请求拦截路径
- SpringMVC核心配置类(设置配置类,扫描controller包,加载Controller控制器bean)
- 多次工作
- 定义处理请求的控制器类
*定义处理请求的控制器方法,并配置映射路径(@RequestMapping)与返回json数据(@ResponseBody) - 多次工作我们可以通过实现一个用户的删除功能来体验一把
- controller类中编写删除方法
- 定义处理请求的控制器类
java
//2.制作控制器类,等同于Servlet
//2.1必须是一个spring管理的bean
//2.2定义具体处理请求的方法
//2.3设置当前方法的访问路径
//2.4设置响应结果为json数据
@Controller
public class UserController {
@RequestMapping("/save")
@ResponseBody
public String save(){
System.out.println("user save ...");
return "{'module':'springmvc'}";
}
@RequestMapping("/delete")
@ResponseBody
public String delete(){
System.out.println("user delete ...");
return "{'module':'springmvc delete '}";
}
}
- 重启服务器,访问http://localhost/delete ,可以看得如下效果
最后针对本案例中出现的Tomcat的Servlet容器配置再来总结下: - AbstractDispatcherServletInitializer类是SpringMVC提供的快速初始化Web3.0容器的抽象类
- AbstractDispatcherServletInitializer提供三个接口方法供用户实现
- createRootApplicationContext()方法,如果创建Servlet容器时需要加载非SpringMVC对应的bean,使用当前方法进行,使用方式同createServletApplicationContext()
- createServletApplicationContext()方法,创建Servlet容器时,加载SpringMVC对应的bean并放入WebApplicationContext对象范围中,而WebApplicationContext的作用范围为ServletContext范围,即整个web容器范围
- ngetServletMappings()方法,设定SpringMVC对应的请求映射路径,设置为/表示拦截所有请求,任意请求都将转入到SpringMVC进行处理
- createServletApplicationContext用来加载SpringMVC环境
- createRootApplicationContext用来加载Spring环境
2. 入门案例工作流程分析
为了更好的使用SpringMVC,我们将SpringMVC的使用过程总共分两个阶段来分析,分别是启动服务器初始化过程和单次请求过程
2.1 启动服务器初始化过程
- 服务器启动,执行ServletContainersInitConfig类,初始化web容器
- 执行createServletApplicationContext方法,创建了WebApplicationContext对象
- 该方法加载SpringMVC的配置类SpringMvcConfig来初始化SpringMVC的容器
- 加载SpringMvcConfig配置类
- 执行@ComponentScan加载对应的bean
- 扫描指定包下所有类上的注解,如Controller类上的@Controller注解
- 加载UserController,每个@RequestMapping的名称对应一个具体的方法
* 此时就建立了 /save 和 save方法的对应关系
- 执行getServletMappings方法,定义所有的请求都通过SpringMVC
- /代表所拦截请求的路径规则,只有被拦截后才能交给SpringMVC来处理请求
2.2 单次请求过程
- 发送请求localhost/save
- web容器发现所有请求都经过SpringMVC,将请求交给SpringMVC处理
- 因为符合上面第六步设置的请求路径,所以该请求会交给SpringMVC来处理
- 解析请求路径/save
- 由/save匹配执行对应的方法save()
- 上面的第五步已经将请求路径和方法建立了对应关系,通过/save就能找到对应的save方法
- 执行save()
- 检测到有@ResponseBody直接将save()方法的返回值作为响应求体返回给请求方