Skip to content

Spring Web MVC

Spring Web MVC 是基于 Servlet API 构建的原始 Web 框架,从一开始就包含在 Spring 框架中。其正式名称 "Spring Web MVC" 来自其源码模块名称(spring-webmvc),但它更通俗的名称是 "Spring MVC"。

与 Spring Web MVC 平行,Spring Framework 5.0 引入了一个响应式栈(reactive-stack)Web 框架,其名称 "Spring WebFlux" 同样基于其源码模块(spring-webflux)。本章涵盖 Spring Web MVC。关于响应式栈 Web 应用程序,请参阅 基于响应式栈的 Web 框架

有关 Servlet 容器和 Jakarta EE 版本范围的基准信息和兼容性,请参阅 Spring Framework Wiki

本节摘要


补充教学

1. Spring MVC 的核心工作流

即使在复杂的企业级应用中,Spring MVC 的本质依然是围绕 DispatcherServlet 展开的“查表”过程:

  • 请求进入:所有 HTTP 请求先打到 DispatcherServlet。
  • 查找映射:它问 HandlerMapping:“谁能处理这个 /api/user 路径?”
  • 执行处理:找到对应的 @Controller 方法后,它通过 HandlerAdapter 执行业务代码。
  • 结果转换:如果是 @RestController,它通过 HttpMessageConverter 将返回值(如 User 对象)转为 JSON;如果是传统 @Controller,它找 ViewResolver 渲染 HTML。

2. 从“网页开发”到“接口开发”的转变

早期的 Spring MVC 重点在于生成 HTML 页面(JSP, Velocity)。 现状:随着前后端分离的普及,现在的 Spring MVC 绝大多数时候是作为 RESTful API 的提供者。

  • 关键变化:你会发现 @RestController@ResponseBody 成为了主流,而传统的“视图解析器”在现代项目中已不常用。

3. @Controller 与 @RestController 的区别

这是一个经典的面试题,但在实际开发中至关重要:

  • @Controller:主要用于返回物理视图路径(如 "index" -> index.html)。如果你想在里面回传 JSON,必须在方法上加 @ResponseBody
  • @RestController:它是 @Controller@ResponseBody 的组合体。意味着该类下的所有方法默认都会将返回值写进 HTTP 响应体(通常转为 JSON),而不是去查找视图。

Based on Spring Framework.