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 请求处理的框架。

相关推荐
Ro Jace9 分钟前
计算机专业基础教材
java·开发语言
mango_mangojuice28 分钟前
Linux学习笔记(make/Makefile)1.23
java·linux·前端·笔记·学习
程序员侠客行32 分钟前
Mybatis连接池实现及池化模式
java·后端·架构·mybatis
时艰.35 分钟前
Java 并发编程 — 并发容器 + CPU 缓存 + Disruptor
java·开发语言·缓存
丶小鱼丶40 分钟前
并发编程之【优雅地结束线程的执行】
java
市场部需要一个软件开发岗位1 小时前
JAVA开发常见安全问题:Cookie 中明文存储用户名、密码
android·java·安全
忆~遂愿1 小时前
GE 引擎进阶:依赖图的原子性管理与异构算子协作调度
java·开发语言·人工智能
MZ_ZXD0011 小时前
springboot旅游信息管理系统-计算机毕业设计源码21675
java·c++·vue.js·spring boot·python·django·php
PP东1 小时前
Flowable学习(二)——Flowable概念学习
java·后端·学习·flowable
ManThink Technology1 小时前
如何使用EBHelper 简化EdgeBus的代码编写?
java·前端·网络