面试题: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. 适配器返回结果HandlerAdapterModelAndView结果返回给DispatcherServlet
  8. 调用视图解析器DispatcherServletModelAndView交给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步的细节,面试时也能灵活展开。

相关推荐
豆瓣鸡1 小时前
Agent实战练习
java·python·学习
weisian1512 小时前
Java并发编程--48-美团Leaf与百度UidGenerator:分布式ID生成器的工业级实践
java·leaf号段模式·leaf雪花模式·uidgenerator
郝开2 小时前
Spring Cloud Gateway 3.5.14 使用手册
java·数据库·spring boot·gateway
摇滚侠2 小时前
IDEA 中快捷键的使用和修改 IDEA 中如何调试程序
java·ide·intellij-idea
风筝在晴天搁浅2 小时前
手撕单例模式
java·开发语言·单例模式
星空ξ2 小时前
OpenCode + Oh-My-OpenCode 配置指南:集成 GitHub Copilot 模型与 Java LSP (jdtls)
java·github·copilot·opencode·oh-my-opencode
Seven972 小时前
Tomcat Request请求处理:Container设计
java
逸Y 仙X2 小时前
文章十五:ElasticSearch 运用ingest加工索引数据
java·大数据·elasticsearch·搜索引擎·全文检索