Spring MVC 核心原理解析:从请求到响应到底发生了什么?

目录

[一、什么是 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 的核心设计思想可以总结为三点:

  1. 前端控制器统一调度
  2. 职责拆分,组件协作
  3. 高度可扩展的架构设计

这也是它能够长期成为 Java Web 主流方案的原因。

九、总结

Spring MVC 是一个以 DispatcherServlet 为核心,通过组件协作完成 Web 请求处理的框架。

相关推荐
WKP94182 小时前
线程并行控制CompletableFuture
java·开发语言
九皇叔叔2 小时前
application.yml 文件无 Spring 图标 + 无自动提示
java·spring boot·spring
马猴烧酒.2 小时前
JAVA后端用户登录与鉴权详解
java·数据库·sql
乐之者v2 小时前
软件开发常规流程的版本缩写
java
DN20202 小时前
靠谱的AI销售机器人哪家好
java·人工智能·机器人
黎雁·泠崖2 小时前
Java继承细节:子类继承父类成员的底层逻辑
java·开发语言
冷雨夜中漫步2 小时前
Java中strip与trim()的区别
java·开发语言
heartbeat..3 小时前
Redis 常用命令全解析:基础、进阶与场景化实战
java·数据库·redis·缓存
让我上个超影吧3 小时前
天机学堂——多级缓存
java·spring boot·spring cloud