Spring MVC 核心组件与执行流程详解(含前后端分离 & 传统渲染双模式)

关键词:SpringMVC|DispatcherServlet|HandlerMapping|JSP|JSON API|Java后端
适用读者:Java 初学者、校招/社招求职者、需要复习 Web 原理的开发者


一、为什么还要学 Spring MVC?

尽管 Spring Boot 已成主流,但 Spring MVC 仍是 Java Web 开发的基石。还是有必要了解一下的,毕竟面试会问🐕
本文将带你一次性掌握:

  • ✅ Spring MVC 五大核心组件作用
  • 两种典型架构下的完整执行流程
    • 🟢 传统模式:服务端渲染(JSP / Thymeleaf)
    • 🔵 现代模式:前后端分离(返回 JSON)
  • ✅ 面试如何清晰、有条理地讲清楚原理

二、Spring MVC 五大核心组件

组件 作用 关键说明
DispatcherServlet 中央调度器,接收所有请求并协调其他组件 Web.xml 或 Spring Boot 自动配置注册
HandlerMapping 根据 URL 查找对应的 Controller(Handler) 支持注解(@RequestMapping)或 XML 配置
HandlerAdapter 调用具体的 Controller 方法 适配不同类型的 Handler(如注解式、简单控制器)
Handler(Controller) 开发者编写的业务逻辑处理器 @Controller@RestController 标记
ViewResolver 解析视图名称,生成最终视图(如 JSP 页面) 仅在服务端渲染时使用

💡 注意:前后端分离架构中,ViewResolver 不参与流程,取而代之的是 HttpMessageConverter


三、执行流程对比:两种模式有何不同?

🟢 模式一:传统前后端不分离(服务端渲染)

适用于 JSP、Thymeleaf、FreeMarker 等模板引擎。

1. 用户访问 http://xxx/user/list
2. DispatcherServlet 接收请求
3. HandlerMapping 找到 UserController.list()
4. HandlerAdapter 调用该方法,返回 "user/list"(视图名)
5. ViewResolver 将 "user/list" 解析为 /WEB-INF/views/user/list.jsp
6. JSP 渲染 HTML,写入响应
7. 浏览器直接显示完整页面

特点

  • 后端负责生成完整 HTML
  • @Controller + 返回字符串(视图名)

🔵 模式二:前后端分离(现代主流)

前端(Vue/React)通过 AJAX 请求接口,后端只返回 JSON 数据

1. 前端发起 GET /api/users
2. DispatcherServlet 接收请求
3. HandlerMapping 找到 UserController.getUsers()
4. HandlerAdapter 调用方法,返回 UserList 对象
5. HttpMessageConverter将对象转为 JSON
6. DispatcherServlet 返回 JSON 响应
7. 前端渲染页面

特点

  • 后端只提供数据接口
  • 前端完全控制 UI
  • 使用 @RestController@ResponseBody
  • 跳过 ViewResolver

四、关键差异总结

环节 传统模式(JSP) 前后端分离(JSON)
Controller 注解 @Controller @RestController
返回值类型 String(视图名) Java 对象(自动转 JSON)
视图处理 ViewResolver 渲染 JSP HttpMessageConverter 序列化
响应内容 完整 HTML 纯 JSON 数据

五、面试高频问题 & 回答思路

❓ Q1:Spring MVC 的工作流程是怎样的?

:先说共性:“所有请求由 DispatcherServlet 接收 → HandlerMapping 找 Controller → HandlerAdapter 调用方法”。
再分场景:“如果是前后端不分离的项目,会通过 ViewResolver 渲染页面;如果是前后端分离的项目,则用 HttpMessageConverter 返回 JSON。”

❓ Q2:@Controller@RestController 有什么区别?

@RestController = @Controller + @ResponseBody。后者会让所有方法默认返回 JSON,不走视图解析。


六、总结

无论哪种,底层都是同一套组件协作完成。理解“变”与“不变”,才能真正掌握框架本质。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐