SpingMVC的处理流程

一、什么是SpringMVC

SpringMVC 是 Spring 框架的Web层模块,基于 MVC 设计模式实现,用于接管整个 HTTP 请求的接收、分发、处理、响应全过程。

我们平时写的 @RestController@RequestMapping、接口参数接收、JSON返回、拦截器、文件上传,全部都是SpringMVC的功能

在 SpringBoot 项目中,SpringMVC 是默认集成的,无需手动配置,开箱即用。

核心定位 :专门负责 前端HTTP请求 → 后端接口处理 → 响应结果返回 的整套Web流程。


二、SpringMVC 五大核心组件

整个SpringMVC流程,全部由这5大组件配合完成,先认识组件,再看流程就一目了然。

1. DispatcherServlet(前端控制器)

核心:总调度、大管家

所有请求统一入口,拦截所有HTTP请求,负责分发、调度其他组件,全程把控请求生命周期,是SpringMVC的核心中枢

2. HandlerMapping(处理器映射器)

核心:找接口、匹配地址

根据请求URL、请求方式(GET/POST),匹配对应的 Controller 方法,返回处理器执行链(Handler + 拦截器)。

3. HandlerAdapter(处理器适配器)

核心:执行接口方法

拿到匹配的Controller方法,完成参数绑定、参数校验、调用业务方法,适配不同类型的处理器执行。

4. ViewResolver(视图解析器)

核心:解析视图(前后端分离基本不用)

传统jsp页面项目使用,根据视图名匹配页面资源;现在前后端分离项目,直接返回JSON,视图解析器不生效

5. Handler(处理器)

核心:就是我们写的Controller方法

真正处理业务接口,执行逻辑、调用Service、返回数据。


三、SpringMVC 完整执行流程

整体链路预览

浏览器HTTP请求 → Tomcat → DispatcherServlet → HandlerMapping → HandlerAdapter → Controller → Service → Mapper → 逐层返回 → 自动JSON封装 → 响应前端

分步详细讲解

第1步:用户发起HTTP请求

前端浏览器/axios 发起请求(如 /user/login),请求被服务器 Tomcat 接收。

第2步:Tomcat转交请求给DispatcherServlet

Tomcat 不处理业务,直接将所有请求交给 SpringMVC 的核心总调度 DispatcherServlet

第3步:DispatcherServlet调用HandlerMapping匹配接口

前端控制器请求 处理器映射器 根据 URL 查找对应的 Controller 方法。

匹配成功后,返回 HandlerExecutionChain(包含目标Controller方法 + 拦截器链)。

第4步:DispatcherServlet调用HandlerAdapter执行方法

DispatcherServlet 拿到处理器后,寻找对应的适配器,由适配器负责执行方法。

第5步:HandlerAdapter完成参数解析与绑定

适配器自动完成:

  • 解析URL参数、JSON参数

  • 类型转换、数据封装

  • 参数校验

  • 封装成Controller方法入参

第6步:执行Controller业务方法

适配器反射执行我们写的 Controller 接口方法,Controller 调用 Service 层业务逻辑。

Service 调用 Mapper 操作数据库,完成业务处理。

第7步:Controller返回结果

接口执行完毕,返回 Result、PageResult、字符串、实体类等数据。

第8步:SpringMVC自动JSON序列化

前后端分离项目中,框架自动将返回的对象转为 JSON字符串,无需手动转换。

第9步:响应数据返回前端

DispatcherServlet 封装响应结果,通过 Response 输出流返回给浏览器,一次请求结束。


四、拦截器执行时机

拦截器是SpringMVC的重要功能,在Controller执行前后生效,完整执行顺序:

  1. 请求进入DispatcherServlet

  2. HandlerMapping匹配接口

  3. 拦截器 preHandle(前置拦截):true放行,false直接拦截结束请求

  4. 执行Controller接口方法

  5. 拦截器 postHandle(后置处理):Controller执行完毕,视图渲染前

  6. 拦截器 afterCompletion(最终回调):请求完全结束、视图渲染完毕后执行

日常用途:JWT登录校验、权限拦截、请求日志、限流、跨域处理。

五、SpringMVC 核心源码核心方法

整个流程的核心入口在 DispatcherServlet 中:

java 复制代码
// 核心调度方法
doDispatch(request, response)

该方法内部完成所有核心逻辑:

  1. 获取Handler处理器

  2. 获取HandlerAdapter适配器

  3. 执行拦截器前置方法

  4. 执行Controller方法

  5. 处理返回结果、异常、视图

  6. 执行拦截器后置方法


六、全文总结

  1. SpringMVC 核心是 DispatcherServlet 统一调度,所有请求必经此处;

  2. 流程核心三步:匹配接口 → 执行接口 → 封装响应

  3. 五大组件分工明确:找接口、执方法、做调度、返结果;

  4. 前后端分离项目中,无需视图解析器,默认返回JSON;

  5. 拦截器基于SpringMVC实现,是做登录校验、权限控制的核心手段。