目录
[一、什么是 Spring MVC?它解决了什么问题?](#一、什么是 Spring MVC?它解决了什么问题?)
[二、Spring MVC 中的 MVC 是什么?](#二、Spring MVC 中的 MVC 是什么?)
[三、Spring MVC 的整体架构](#三、Spring MVC 的整体架构)
[1. 请求进入 DispatcherServlet](#1. 请求进入 DispatcherServlet)
[2. HandlerMapping 查找处理器](#2. HandlerMapping 查找处理器)
[3. HandlerAdapter 执行处理器](#3. HandlerAdapter 执行处理器)
[4. Controller 执行业务逻辑](#4. Controller 执行业务逻辑)
[5. 返回结果处理](#5. 返回结果处理)
[6. 响应客户端](#6. 响应客户端)
[五、Spring MVC 中常见的核心能力](#五、Spring MVC 中常见的核心能力)
[1. 请求映射](#1. 请求映射)
[2. 参数解析与绑定](#2. 参数解析与绑定)
[3. 数据返回与序列化](#3. 数据返回与序列化)
[4. 异常处理](#4. 异常处理)
[六、Spring MVC 与 Spring 的关系](#六、Spring MVC 与 Spring 的关系)
[七、Spring MVC 与 Spring Boot 的关系](#七、Spring MVC 与 Spring Boot 的关系)
[八、Spring MVC 的设计思想总结](#八、Spring MVC 的设计思想总结)
一、什么是 Spring MVC?它解决了什么问题?
Spring MVC 是 Spring 提供的一个 基于 MVC 模式的 Web 框架,用于构建 Web 应用和 REST 接口。
在没有 Spring MVC 之前,传统 Servlet 开发存在明显问题:
- 一个 Servlet 处理大量逻辑
- 请求分发、参数解析、业务处理耦合严重
- 可维护性差、扩展成本高
**Spring MVC 的目标:**将 Web 请求处理过程进行职责拆分,让每一部分只做一件事。
二、Spring MVC 中的 MVC 是什么?
Spring MVC 遵循经典的 MVC(Model-View-Controller) 模式:
- Model:业务数据和业务逻辑
- View:页面展示(JSP、Thymeleaf、JSON 等)
- Controller:请求处理与调度
在前后端分离项目中:
- View 往往退化为 JSON
- Controller 的职责更加清晰
三、Spring MVC 的整体架构
Spring MVC 的核心架构围绕一个组件展开:DispatcherServlet(前端控制器)
所有请求都会先到 DispatcherServlet,然后再由它统一调度。
核心组件包括:
- DispatcherServlet:统一入口
- HandlerMapping:找到处理请求的方法
- HandlerAdapter:执行目标方法
- Handler(Controller):具体业务处理
- ViewResolver:视图解析
- View:结果渲染
Spring MVC 是一个"强中心调度"的框架。
四、一次完整请求的执行流程
下面是一次 HTTP 请求在 Spring MVC 中的完整流程。
用户发起请求后,请求首先进入前端控制器 DispatcherServlet。DispatcherServlet 根据请求的 URL 信息通过处理器映射器 HandlerMapping 查找对应的处理器,并封装成一个处理器执行链 HandlerExecutionChain。随后,DispatcherServlet 将处理器交由处理器适配器 HandlerAdapter 执行,HandlerAdapter 负责完成参数解析并调用具体的 Controller 方法。Controller 处理业务逻辑后返回 ModelAndView,DispatcherServlet 再将其交给 ViewResolver 解析出具体的 View,并将 Model 数据渲染到视图中,最终由 DispatcherServlet 将渲染结果响应给客户端。
1. 请求进入 DispatcherServlet
- 所有请求首先到达 DispatcherServlet
- 相当于 Web 层的"总控中心"
2. HandlerMapping 查找处理器
- 根据 URL、请求方式
- 找到对应的 Controller 方法
java
@GetMapping("/users/{id}")
public User getUser(@PathVariable Long id) { }
3. HandlerAdapter 执行处理器
- 负责调用 Controller 方法
- 同时完成:
- 参数解析
- 参数绑定
- 类型转换
你平时写的各种传参,本质都发生在这一步。
4. Controller 执行业务逻辑
- 调用 Service
- 返回结果(ModelAndView 或数据)
5. 返回结果处理
根据返回值类型不同:
- 返回视图名 → ViewResolver 解析
- 返回对象 → HttpMessageConverter 转换为 JSON
6. 响应客户端
- 数据或页面写入 HTTP 响应
- 请求结束
五、Spring MVC 中常见的核心能力
1. 请求映射
java
@RequestMapping
@GetMapping
@PostMapping
完成 URL → 方法 的映射。
2. 参数解析与绑定
- 路径参数
- 请求参数
- 请求体参数
- 对象参数
本质是 请求数据 → Java 方法参数 的映射。
3. 数据返回与序列化
java
@ResponseBody
@RestController
- 返回 JSON
- 依赖 HttpMessageConverter
- 默认使用 Jackson
4. 异常处理
java
@ExceptionHandler
@ControllerAdvice
- 统一异常处理
- 解耦业务逻辑与异常逻辑
六、Spring MVC 与 Spring 的关系
一个非常容易混淆的问题是:Spring MVC 和 Spring 是什么关系?
- Spring:核心容器(IoC + AOP)
- Spring MVC:运行在 Spring 之上的 Web 框架
Spring MVC 强依赖 Spring 的 IoC 容器。
Controller、Service、组件管理,全部交给 Spring。
七、Spring MVC 与 Spring Boot 的关系
Spring Boot 并没有改变 Spring MVC 的核心原理,而是:
- 自动注册 DispatcherServlet
- 自动配置 HandlerMapping、MessageConverter
- 减少 XML 和样板代码
用不用 Spring Boot,Spring MVC 的执行流程完全一致。
八、Spring MVC 的设计思想总结
Spring MVC 的核心设计思想可以总结为三点:
- 前端控制器统一调度
- 职责拆分,组件协作
- 高度可扩展的架构设计
这也是它能够长期成为 Java Web 主流方案的原因。
九、总结
Spring MVC 是一个以 DispatcherServlet 为核心,通过组件协作完成 Web 请求处理的框架。