本文一次性讲透Java后端面试高频考点------SpringMVC执行流程,区分传统JSP渲染和前后端分离接口两种场景,附可直接背诵的面试模板,帮你告别死记硬背。
一、前置知识:核心组件先搞懂
SpringMVC的执行流程,本质是**「前端控制器模式」** 的实现,所有请求都由DispatcherServlet统一调度,核心组件分工明确:
| 组件 | 核心作用 |
|---|---|
DispatcherServlet |
前端控制器,整个流程的入口和调度中心,所有请求的「总调度员」,它是被tomcat容器初始化的,当这个类被加载之后,内部就加载了一些组件类(如下面几个) |
HandlerMapping |
处理器映射器:根据请求URL,匹配到对应的Controller处理器 |
HandlerAdapter |
处理器适配器:适配不同类型的Controller,统一调用目标方法 |
ViewResolver |
视图解析器:仅JSP版使用,解析视图路径,找到并渲染页面 |
HttpMessageConverter |
消息转换器:仅前后端版使用,将Controller返回值序列化为JSON/XML |
划重点: 两个版本的请求分发阶段(前5步)完全相同,核心差异仅在Controller执行后的「结果处理阶段」,不用死记两套完全不同的流程!
二、版本1:传统视图渲染版(JSP)执行流程
适用于传统SSM项目、服务端渲染页面的场景,流程共11步,完整还原请求到响应的全过程:

- 用户发送请求 :请求被前端控制器
DispatcherServlet接收(整个流程的入口)。 - 调用处理器映射器 :
DispatcherServlet调用HandlerMapping,根据请求URL查找匹配的处理器。 - 返回处理器执行链 :
HandlerMapping找到目标Controller,生成包含处理器对象+拦截器链的执行链(如果有),返回给DispatcherServlet。 - 调用处理器适配器 :
DispatcherServlet调用HandlerAdapter,由适配器统一适配调用目标处理器。 - 执行Controller方法 :
HandlerAdapter适配不同类型的Controller,调用目标业务方法。 - 返回ModelAndView :Controller方法执行完成,返回
ModelAndView对象(包含模型数据+视图名)。 - 适配器返回结果 :
HandlerAdapter将ModelAndView结果返回给DispatcherServlet。 - 调用视图解析器 :
DispatcherServlet将ModelAndView交给ViewResolver。 - 解析物理视图 :
ViewResolver解析视图名,找到对应的物理视图(如JSP文件),返回View对象。 - 渲染视图 :
DispatcherServlet调用View的渲染方法,将Model中的数据填充到视图中,生成最终HTML页面。 - 响应给用户 :
DispatcherServlet将渲染好的HTML页面返回给浏览器,完成请求响应。
三、版本2:前后端分离接口版(JSON响应)执行流程
适用于前后端分离项目、RESTful接口开发场景,省去了视图渲染的过程,流程简化为7步:

- 用户发送请求 :请求被前端控制器
DispatcherServlet接收。 - 调用处理器映射器 :
DispatcherServlet调用HandlerMapping,根据URL匹配到目标Controller方法。 - 返回处理器执行链 :
HandlerMapping找到目标Controller,生成包含处理器对象+拦截器链的执行链(如果有),返回给DispatcherServlet。 - 调用处理器适配器 :
DispatcherServlet调用HandlerAdapter,准备调用目标Controller方法。 - 执行Controller方法 :
HandlerAdapter适配调用目标方法,方法上标注@ResponseBody注解。 - 消息转换器序列化 :
HandlerAdapter通过HttpMessageConverter,将Controller返回的对象序列化为JSON格式数据。 - 直接响应给前端 :
DispatcherServlet将JSON数据直接写入HTTP响应体,返回给前端,无需视图渲染。
四、两个版本核心差异对比
| 对比维度 | 传统JSP视图版 | 前后端分离接口版 |
|---|---|---|
| 核心流程差异 | 包含「视图解析+页面渲染」阶段 | 无视图流程,直接处理响应体 |
| 关键依赖组件 | ViewResolver(视图解析器) |
HttpMessageConverter(消息转换器) |
| Controller返回值 | ModelAndView(数据+视图名) |
实体对象/集合/基本类型 |
| 最终响应结果 | HTML页面 | JSON/XML数据 |
| 适用场景 | 服务端渲染项目 | 前后端分离、RESTful接口开发 |
五、面试答题模板(直接背!)
通用版(面试优先说,覆盖两个场景)
面试官你好,SpringMVC的执行流程,核心是围绕前端控制器DispatcherServlet的调度展开,请求分发阶段是通用的,根据业务场景不同,分为两种结果处理方式:
- 通用请求分发阶段 :用户请求到达
DispatcherServlet后,先由HandlerMapping匹配到目标Controller,再由HandlerAdapter适配调用Controller方法。 - 传统视图渲染场景 :Controller返回
ModelAndView,由ViewResolver解析视图并渲染页面,最终响应给用户。 - 前后端分离接口场景 :Controller方法通过
@ResponseBody标注,由HttpMessageConverter将返回值转为JSON,直接响应给前端,省去了视图解析和渲染的过程。
精简版(时间紧张时用)
SpringMVC流程的核心是前端控制器DispatcherServlet:请求先由HandlerMapping匹配处理器,再由HandlerAdapter调用Controller;如果是视图项目,Controller返回的ModelAndView会交给ViewResolver渲染页面;如果是前后端项目,返回值会被转为JSON直接响应。
六、总结
SpringMVC的执行流程看似复杂,本质是「请求分发 → 处理器执行 → 结果处理」的三步结构,前两步是通用的,仅第三步根据业务场景不同分为视图渲染和JSON响应两种方式。理解了核心组件的分工,就不用死记硬背11步/7步的细节,面试时也能灵活展开。