SpringMVC(Model-View-Controller)的执行流程
Spring MVC是Spring框架中用于构建web应用 的模块,基于MVC的设计模式实现"请求处理,业务逻辑,视图响应"的完整闭环
核心执行流程:
1.客户端发送请求
用户通过浏览器/客户端向服务器发送HTTP请求,请求url被DispatcherServlet(前端控制器)接收
2.DispatcherServlet调用HandlerMapping
- DispatcherServlet 不直接处理请求,而是委托 HandlerMapping(处理器映射器) 查找 "哪个处理器(Controller)能处理该请求"。
- HandlerMapping 根据请求 URL 、请求方法(GET/POST)等信息,匹配对应的 Handler(处理器,即 Controller 中的方法) ,并返回一个 HandlerExecutionChain(包含 Handler 和拦截器)。
3.DispatcherServlet调用HandlerAdapter
DispatcherServlet获取到Handler后,通过HandlerAdapter(处理器控制器)去执行Handler (因为Handler可能是多种形式的,如注解式Controller、XML配置的Controller,Adapter负责统一适配)
4.HandlerAdapter执行Handler(Controller方法)
HandlerAdapter调用Controller中对应的方法(如UserController.list()),执行业务逻辑(可能调用Service,Dao层),处理完成后返回一个ModelAndView对象 (包含数据模型Model和视图名称ViewName)
5.执行拦截器的postHandle方法
若存在拦截器(如登录校验、日志记录),在Handle执行后、视图渲染前,会调用拦截器的postHandle()方法(可对ModelAndView进行修改)
6.DispatcherServlet调用ViewResolver
DispatcherServlet接收返回的ModelAndView后,委托ViewResolver(视图解析器) 根据视图名称解析出具体的View(视图对象,JSP、Thymeleaf模板)
- 例如:ViewResolver 可能将视图名称
list解析为/WEB-INF/views/user/list.jsp。
7.ViewResolver返回View对象
ViewResolver将解析后的View对象返回给DispatcherServlet
8.View渲染数据
DispatcherServlet调用View对象的render()方法,将Model中的数据(如用户列表)填充到View中(如JSP页面的${users}变量),生成最终的HTML响应
9.执行拦截器的afterCompletion方法
视图渲染完成后,调用拦截器的afterCompletion()方法(可用于资源清理,如关闭流)
10.DispatcherServlet返回响应
将渲染后的HTML响应发送给客户端(浏览器),完成异常请求
11.流程结束
客户端接收响应并展示页面。

| 组件名称 | 作用核心 | 角色 |
|---|---|---|
| DispatcherServlet | 中央调度,协调所有组件 | 前端控制器 |
| HandlerMapping | 根据请求查找对应的 Controller 方法 | 处理器映射器 |
| HandlerAdapter | 适配并执行 Controller 方法 | 处理器适配器 |
| Controller | 处理业务逻辑,返回 ModelAndView | Handler处理器,业务逻辑 |
| ViewResolver | 将视图名解析为具体视图(如 JSP) | 视图解析器 |
| View | 渲染数据,生成响应(如 HTML) | 视图 |
| 拦截器(Interceptor) | 拦截请求 / 响应,执行额外逻辑(如登录验证) | 质检员(检查菜品质量) |
