SpringMVC的执行流程

SpringMVC(Model-View-Controller)的执行流程

Spring MVC是Spring框架中用于构建web应用 的模块,基于MVC的设计模式实现"请求处理,业务逻辑,视图响应"的完整闭环

核心执行流程:

1.客户端发送请求

​ 用户通过浏览器/客户端向服务器发送HTTP请求,请求url被DispatcherServlet(前端控制器)接收

2.DispatcherServlet调用HandlerMapping

  1. DispatcherServlet 不直接处理请求,而是委托 HandlerMapping(处理器映射器) 查找 "哪个处理器(Controller)能处理该请求"。
  2. 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) 拦截请求 / 响应,执行额外逻辑(如登录验证) 质检员(检查菜品质量)