面试题:SpringMVC执行流程(视图版+前后端分离版)

本文一次性讲透Java后端面试高频考点------SpringMVC执行流程,区分传统JSP渲染和前后端分离接口两种场景,附可直接背诵的面试模板,帮你告别死记硬背。


一、前置知识:核心组件先搞懂

SpringMVC的执行流程,本质是**「前端控制器模式」** 的实现,所有请求都由DispatcherServlet统一调度,核心组件分工明确:

组件 核心作用
DispatcherServlet 前端控制器,整个流程的入口和调度中心,所有请求的「总调度员」,它是被tomcat容器初始化的,当这个类被加载之后,内部就加载了一些组件类(如下面几个)
HandlerMapping 处理器映射器:根据请求URL,匹配到对应的Controller处理器
HandlerAdapter 处理器适配器:适配不同类型的Controller,统一调用目标方法
ViewResolver 视图解析器:仅JSP版使用,解析视图路径,找到并渲染页面
HttpMessageConverter 消息转换器:仅前后端版使用,将Controller返回值序列化为JSON/XML

划重点: 两个版本的请求分发阶段(前5步)完全相同,核心差异仅在Controller执行后的「结果处理阶段」,不用死记两套完全不同的流程!


二、版本1:传统视图渲染版(JSP)执行流程

适用于传统SSM项目、服务端渲染页面的场景,流程共11步,完整还原请求到响应的全过程:

  1. 用户发送请求 :请求被前端控制器DispatcherServlet接收(整个流程的入口)。
  2. 调用处理器映射器 :DispatcherServlet调用HandlerMapping,根据请求URL查找匹配的处理器。
  3. 返回处理器执行链 :HandlerMapping找到目标Controller,生成包含处理器对象+拦截器链的执行链(如果有),返回给DispatcherServlet。
  4. 调用处理器适配器 :DispatcherServlet调用HandlerAdapter,由适配器统一适配调用目标处理器。
  5. 执行Controller方法 :HandlerAdapter适配不同类型的Controller,调用目标业务方法。
  6. 返回ModelAndView :Controller方法执行完成,返回ModelAndView对象(包含模型数据+视图名)。
  7. 适配器返回结果 :HandlerAdapter将ModelAndView结果返回给DispatcherServlet。
  8. 调用视图解析器 :DispatcherServlet将ModelAndView交给ViewResolver。
  9. 解析物理视图 :ViewResolver解析视图名,找到对应的物理视图(如JSP文件),返回View对象。
  10. 渲染视图 :DispatcherServlet调用View的渲染方法,将Model中的数据填充到视图中,生成最终HTML页面。
  11. 响应给用户 :DispatcherServlet将渲染好的HTML页面返回给浏览器,完成请求响应。

三、版本2:前后端分离接口版(JSON响应)执行流程

适用于前后端分离项目、RESTful接口开发场景,省去了视图渲染的过程,流程简化为7步:

  1. 用户发送请求 :请求被前端控制器DispatcherServlet接收。
  2. 调用处理器映射器 :DispatcherServlet调用HandlerMapping,根据URL匹配到目标Controller方法。
  3. 返回处理器执行链 :HandlerMapping找到目标Controller,生成包含处理器对象+拦截器链的执行链(如果有),返回给DispatcherServlet。
  4. 调用处理器适配器 :DispatcherServlet调用HandlerAdapter,准备调用目标Controller方法。
  5. 执行Controller方法 :HandlerAdapter适配调用目标方法,方法上标注@ResponseBody注解。
  6. 消息转换器序列化 :HandlerAdapter通过HttpMessageConverter,将Controller返回的对象序列化为JSON格式数据。
  7. 直接响应给前端 :DispatcherServlet将JSON数据直接写入HTTP响应体,返回给前端,无需视图渲染。

四、两个版本核心差异对比

对比维度 传统JSP视图版 前后端分离接口版
核心流程差异 包含「视图解析+页面渲染」阶段 无视图流程,直接处理响应体
关键依赖组件 ViewResolver(视图解析器) HttpMessageConverter(消息转换器)
Controller返回值 ModelAndView(数据+视图名) 实体对象/集合/基本类型
最终响应结果 HTML页面 JSON/XML数据
适用场景 服务端渲染项目 前后端分离、RESTful接口开发

五、面试答题模板(直接背!)

通用版(面试优先说,覆盖两个场景)

面试官你好,SpringMVC的执行流程,核心是围绕前端控制器DispatcherServlet的调度展开,请求分发阶段是通用的,根据业务场景不同,分为两种结果处理方式:

  1. 通用请求分发阶段 :用户请求到达DispatcherServlet后,先由HandlerMapping匹配到目标Controller,再由HandlerAdapter适配调用Controller方法。
  2. 传统视图渲染场景 :Controller返回ModelAndView,由ViewResolver解析视图并渲染页面,最终响应给用户。
  3. 前后端分离接口场景 :Controller方法通过@ResponseBody标注,由HttpMessageConverter将返回值转为JSON,直接响应给前端,省去了视图解析和渲染的过程。

精简版(时间紧张时用)

SpringMVC流程的核心是前端控制器DispatcherServlet:请求先由HandlerMapping匹配处理器,再由HandlerAdapter调用Controller;如果是视图项目,Controller返回的ModelAndView会交给ViewResolver渲染页面;如果是前后端项目,返回值会被转为JSON直接响应。


六、总结

SpringMVC的执行流程看似复杂,本质是「请求分发 → 处理器执行 → 结果处理」的三步结构,前两步是通用的,仅第三步根据业务场景不同分为视图渲染和JSON响应两种方式。理解了核心组件的分工,就不用死记硬背11步/7步的细节,面试时也能灵活展开。

相关推荐
拆房老料18 分钟前
【第四部分:Agentic 智能体设计模式】16. 一个 Prompt 搞不定复杂任务?试试 Prompt Chaining
java·前端·人工智能·设计模式·prompt
张张123y1 小时前
后端第十四课:Agent 记忆系统(让 Agent 记住上下文和用户,跨会话不健忘)
java·大数据·人工智能·python·agent·记忆
曹牧6 小时前
C#:空合并运算符
java·前端·数据库
布吉岛的石头6 小时前
Java 程序员第 50 阶段2:预训练的目标函数:自回归语言建模本质
java·开发语言·人工智能·深度学习·回归·transformer
golang学习记6 小时前
IDEA 2026年的玩法已经完全不同
java·ide·intellij-idea
紧跟先前的步伐7 小时前
Go AI Agent 实战 05|Temperature 与生成参数:让模型输出可控
java·人工智能·golang
金銀銅鐵7 小时前
[Java] 展示添加元素时 ArrayList 的内部变化
java·后端·ai编程
斌糖雪梨7 小时前
spring auth 核心流程详解
java·后端·spring
文丑颜不良啊9 小时前
LeetCode201~225题目解析
java·leetcode
SL_staff10 小时前
4G设备掉线三层归因指南:SIM卡、模组、JVS-IOT网关配置精准锁定
java·物联网·产品