Spring MVC 的工作流程,漏了这一个今天刚好面试提到了,没回答出来,记录一下。
🧭 Spring MVC 整体执行流程一览(从请求到响应)
✅ 1. 请求发出:浏览器发送 HTTP 请求
如用户访问:
http://localhost:8080/user/list
✅ 2. DispatcherServlet 接收请求(前端控制器)
- 职责: Spring MVC 的入口点,负责整个请求的调度与分发。
- 在
web.xml
或 Spring Boot 的自动配置中,DispatcherServlet
会映射所有请求(如:/
)。
✅ 3. HandlerMapping 查找处理器(Controller)
- DispatcherServlet 通过 HandlerMapping 查找能处理当前 URL 的
Controller
及其方法。 - 默认实现如:
RequestMappingHandlerMapping
。
✅ 4. HandlerAdapter 调用目标方法
- 查找到 Controller 方法后,由 HandlerAdapter 调用这个方法。
- 常用的是
RequestMappingHandlerAdapter
。 - 支持参数解析器、返回值处理器等扩展点。
✅ 5. Controller 处理请求
-
具体业务逻辑执行,返回一个
ModelAndView
对象或其他响应体,其中包含模型数据和逻辑视图名。java@Controller public class UserController { @GetMapping("/user/list") public String list(Model model) { model.addAttribute("users", userService.findAll()); return "userList"; // 返回逻辑视图名 } }
✅ 6. ViewResolver 视图解析器定位视图
- 根据 Controller 返回的逻辑视图名(如
"userList"
),由 ViewResolver 解析成实际视图路径(如:/WEB-INF/views/userList.jsp
)。 - Spring Boot 默认用的是 Thymeleaf 或 JSP。
✅ 7. 渲染视图 & 返回响应
- 渲染视图并将结果写入 HTTP 响应,响应浏览器。
Spring MVC 虽然整体流程复杂,但是实际开发中很简单,大部分的组件不需要我们开发人员创建和管理,真正需要处理的只有 Controller 、View 、Model。
在前后端分离的情况下,步骤 6、7会略有不同,后端通常只需要处理数据,并将 JSON 格式的数据返回给前端就可以了,而不是返回完整的视图页面。
说说 Handler ?为什么还需要 HandlerAdapter
Handler 一般就是指 Controller,Controller 是 Spring MVC 的核心组件,负责处理请求,返回响应。
Spring MVC 允许使用多种类型的处理器。不仅仅是标准的 @Controller
注解的类,还可以是实现了特定接口的其他类(如 HttpRequestHandler 或 SimpleControllerHandlerAdapter 等)。这些处理器可能有不同的方法签名和交互方式。
HandlerAdapter 的主要职责就是调用 Handler 的方法来处理请求,并且适配不同类型的处理器。HandlerAdapter 确保 DispatcherServlet 可以以统一的方式调用不同类型的处理器,无需关心具体的执行细节。
🔁 总流程图(Mermaid)

📚 场景举例:用户管理系统
步骤 | 描述 |
---|---|
用户访问 /user/list |
浏览器发出请求 |
DispatcherServlet 拦截 | 前端控制器统一处理 |
HandlerMapping 匹配到 UserController.list() |
方法负责处理用户列表 |
返回逻辑视图 userList |
将用户数据加入 Model |
ViewResolver 映射到 /WEB-INF/views/userList.jsp |
渲染用户列表页面 |
最终页面展示给用户 | 请求-响应闭环完成 |
💡 面试延伸问题(必须掌握)
面试高频问题 | 应答思路 |
---|---|
DispatcherServlet 的职责是什么? | 核心调度器,协调请求流程 |
HandlerMapping 是如何工作的? | 根据 URL 匹配 Controller 方法 |
ViewResolver 支持哪些视图? | JSP、Thymeleaf、FreeMarker 等 |
如何自定义参数解析器? | 实现 HandlerMethodArgumentResolver |
🧠 源码阅读入口建议
模块 | 源码入口类 |
---|---|
DispatcherServlet | org.springframework.web.servlet.DispatcherServlet |
HandlerMapping | RequestMappingHandlerMapping |
HandlerAdapter | RequestMappingHandlerAdapter |
ViewResolver | InternalResourceViewResolver 等 |
🧵 总结一句话:
Spring MVC 中,DispatcherServlet 是核心协调者,通过一系列策略接口(HandlerMapping、HandlerAdapter、ViewResolver 等)完成从请求分发到视图渲染的完整链路。