讲讲Spring MVC的处理流程
Spring MVC 是 Spring Framework 的一个核心模块,是一个基于MVC 设计模式 的优秀 Web 框架。它本质上是 Spring 框架在Web 应用领域的延伸,旨在简化基于 MVC 架构的 Web 应用程序开发。MVC全名是Model View Controller,是模型(model)视图(view)控制器(controller)的缩写。模型(model)代表应用程序的核
目录
1.SpringMVC介绍
Spring MVC 是 Spring Framework 的一个核心模块,是一个基于 MVC 设计模式 的优秀 Web 框架。它本质上是 Spring 框架在 Web 应用领域的延伸,旨在简化基于 MVC 架构的 Web 应用程序开发。MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写。
- 模型(model)代表应用程序的核心数据和业务规则。它专注于处理什么数据和数据如何变化。
- 视图(view):负责与用户直接交互的界面部分。它专注于如何展示数据和接收用户输入。
- 控制器(controller):作为视图和模型之间的协调者。它接收用户的输入,决定使用哪个模型来处理,以及选择哪个视图来展示结果。

我们经常在项目中构建的基础三层架构(controller,service,mapper)就是在它们的基础之上所诞生的。
2.SpringMVC关键组件
1.DispatcherServlet(前端控制器)
前端控制器是一种设计模式,它提供了一个统一的入口点来处理所有的 Web 请求。在传统 Servlet 开发中,每个 URL 可能需要一个单独的 Servlet,而前端控制器模式用一个 Servlet 处理所有请求,然后分发到不同的处理器。Spring MVC 中就是 DispatcherServlet 这个具体的实现。
职责:
-
接收所有 HTTP 请求
-
协调其他组件完成请求处理
-
返回最终响应给客户端
DispatcherServlet可以说是整个SpringMVC的核心所在,它承担着从用户请求到用户接收的一整块处理链条的责任。
配置演示:
<!-- web.xml 配置 -->
<servlet>
<servlet-name>dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>dispatcher</servlet-name>
<url-pattern>/</url-pattern> <!-- 拦截所有请求 -->
</servlet-mapping>
2.HandlerMapping(处理器映射器)
HandlerMapping 是一个策略接口,定义了如何根据 HTTP 请求找到对应的处理器(Handler)。它在 DispatcherServlet 和具体处理器之间建立桥梁。
职责:
-
根据请求的 URL 路径,找到对应的处理器(Handler)
-
维护请求路径与处理器的映射关系
常用实现:
- RequestMappingHandlerMapping:处理 @RequestMapping注解(最常用)
- BeanNameUrlHandlerMapping:根据 Bean 名称映射
- SimpleUrlHandlerMapping:通过配置文件映射
大概说一下它的一个工作方式,我们假设有一个GET /users/list请求,HandlerMapping 查找映射表:"/users/list"就会转化成UserController.listUsers()给前端控制器。
3.HandlerAdapter(处理器适配器)
HandlerAdapter 是一个适配器接口,它让 DispatcherServlet 能够以统一的方式调用各种不同类型的处理器(Handler),而不需要关心处理器的具体实现。
职责:
-
适配不同类型的处理器(Controller)
-
统一调用处理器方法
-
处理请求参数绑定和返回值处理
常用实现:
- RequestMappingHandlerAdapter:处理 @Controller和 @RequestMapping
- SimpleControllerHandlerAdapter:处理 Controller接口实现
- HttpRequestHandlerAdapter:处理 HttpRequestHandler实现
HandlerAdapter会进行参数封装、数据格式转换、数据校验等操作
4.Handler处理器(Controller)
Handler处理器是 Spring MVC 的业务逻辑执行核心,是实际处理 HTTP 请求并返回响应的组件。
职责:
-
执行具体的业务逻辑
-
调用 Service 层处理业务
-
准备模型数据
-
返回视图信息
最常见的就是我们平时写的注解形式
@Controller
public class UserController {
@GetMapping("/users")
public String listUsers(Model model) {
model.addAttribute("users", userService.findAll());
return "userList";
}
}
5. ViewResolver(视图解析器)
ViewResolver 是一个策略接口,用于解析控制器返回的视图名称,并返回一个用于渲染的 View 对象。它是 MVC 架构中视图层的重要桥梁。
职责:
-
将 Controller 返回的逻辑视图名解析为实际的 View 对象
-
支持多种视图技术(JSP、Thymeleaf、FreeMarker等)
常用实现:
- InternalResourceViewResolver:用于 JSP(最常用)
- ThymeleafViewResolver:用于 Thymeleaf
- FreeMarkerViewResolver:用于 FreeMarker
- BeanNameViewResolver:根据 Bean 名称解析
一个基础的视图解析器配置类如下:
@Configuration
public class WebConfig {
@Bean
public ViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
return resolver;
}
}
简单说一下流程:
1.Handler处理器返回: "user/list"
2.InternalResourceViewResolver 解析:
前缀: "/WEB-INF/views/"
视图名: "user/list"
后缀: ".jsp"
实际路径: "/WEB-INF/views/user/list.jsp"
3.最后创建 InternalResourceView 对象返回
6.View(视图)
View 是一个渲染接口,负责将模型数据渲染成最终的响应格式(HTML、JSON、XML、PDF、Excel等)。它是用户界面的最终呈现者。
职责:
-
将模型数据渲染成最终响应(通常是 HTML)
-
支持不同的视图技术
3.SpringMVC处理流程
说完SpringMVC的一些关键组件,我们来看看这些组件到底是如何相互配合,完成从请求到接收数据的过程。

1.用户发送请求至前端控制器 DispatcherServlet
2.DispatcherServlet 收到请求调用处理器映射器 HandlerMapping
3.处理器映射器根据请求 URL 找到具体的处理器,生成处理器执行链 HandlerExecutionChain(包括处理器对象和处理器拦截器)一并返回给 DispatcherServlet
4.DispatcherServlet 根据处理器 Handler 获取处理器适配器 HandlerAdapter 执行 HandlerAdapter 处理一系列的操作,如:参数封装、数据格式转换、数据验证等操作
5.执行处理器 Handler(Controller,也叫页面控制器)
6.Handler 执行完成返回 ModelAndView
7.HandlerAdapter 将 Handler 执行结果 ModelAndView 返回到 DispatcherServlet
8.DispatcherServlet 将 ModelAndView 传给 ViewResolver 视图解析器
9.ViewResolver 解析后返回具体 View
10.DispatcherServlet 对 View 进行渲染视图(即将模型数据 model 填充至视图中)
11.DispatcherServlet 响应用户
4.SpringMVC的主要优势
1.与 Spring 无缝集成:可以充分利用 Spring 的 IOC(控制反转)和 AOP(面向切面编程)特性,方便地进行依赖注入和事务管理。
2.高度可配置:几乎所有组件都可以通过配置文件(XML)或注解进行定制和扩展
3.常用强大注解:
- @Controller:标记一个类为控制器。
- @RequestMapping:将 URL 映射到处理方法。
- @RequestParam, @PathVariable:绑定请求参数和路径变量。
- @RequestBody, @ResponseBody:支持 RESTful 风格的 JSON/XML 数据绑定。
4.灵活的视图技术:支持 JSP、Thymeleaf、FreeMarker、Velocity、PDF、Excel 等多种视图技术。
5.拦截器:提供 HandlerInterceptor接口,允许在请求处理前后执行通用逻辑(如权限检查、日志记录),功能类似于过滤器但更精细。
制作不易,如果对你有帮助请点赞,评论,收藏,感谢大家的支持

更多推荐

所有评论(0)