一、什么是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执行前后生效,完整执行顺序:
-
请求进入DispatcherServlet
-
HandlerMapping匹配接口
-
拦截器 preHandle(前置拦截):true放行,false直接拦截结束请求
-
执行Controller接口方法
-
拦截器 postHandle(后置处理):Controller执行完毕,视图渲染前
-
拦截器 afterCompletion(最终回调):请求完全结束、视图渲染完毕后执行
日常用途:JWT登录校验、权限拦截、请求日志、限流、跨域处理。
五、SpringMVC 核心源码核心方法
整个流程的核心入口在 DispatcherServlet 中:
java
// 核心调度方法
doDispatch(request, response)
该方法内部完成所有核心逻辑:
-
获取Handler处理器
-
获取HandlerAdapter适配器
-
执行拦截器前置方法
-
执行Controller方法
-
处理返回结果、异常、视图
-
执行拦截器后置方法
六、全文总结
-
SpringMVC 核心是 DispatcherServlet 统一调度,所有请求必经此处;
-
流程核心三步:匹配接口 → 执行接口 → 封装响应;
-
五大组件分工明确:找接口、执方法、做调度、返结果;
-
前后端分离项目中,无需视图解析器,默认返回JSON;
-
拦截器基于SpringMVC实现,是做登录校验、权限控制的核心手段。