菜单

Spring MVC

相关源文件

本文档涵盖了 Spring MVC,这是 Spring Framework 中基于 Servlet 的 Web 框架。Spring MVC 提供了用于构建 Web 应用程序的服务器端基础设施以及客户端 HTTP 通信功能。有关响应式 Web 编程,请参阅 WebFlux 和响应式编程。有关 HTTP 消息抽象和 URI 处理工具,请参阅 HTTP 抽象和 URI 处理

架构概述

Spring MVC 包含两个主要组件:用于在 Servlet 容器中处理 HTTP 请求的服务器端基础设施,以及客户端 HTTP 通信工具。该框架遵循模型-视图-控制器 (Model-View-Controller) 模式,并与 Spring 的核心容器和依赖注入功能深度集成。

来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java85-126 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java124-200

RestTemplate - HTTP 客户端

RestTemplate 是 Spring MVC 的主要同步 HTTP 客户端,它提供了一种基于模板的方法来发出 HTTP 请求。它提供了用于常见 HTTP 操作的便捷方法,并自动处理请求/响应转换。

RestTemplate 类为所有标准 HTTP 动词提供了方法

  • getForObject() / getForEntity() - GET 请求
  • postForObject() / postForEntity() / postForLocation() - POST 请求
  • put() - PUT 请求
  • patchForObject() - PATCH 请求
  • delete() - DELETE 请求
  • optionsForAllow() - OPTIONS 请求
  • headForHeaders() - HEAD 请求
  • exchange() - 适用于任何 HTTP 方法的通用方法

来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java442-692 spring-web/src/main/java/org/springframework/web/client/RestTemplate.java695-773

消息转换器集成

RestTemplate 根据类路径上可用的库自动检测和配置 HttpMessageConverter 实例。这些转换器负责处理请求和响应体的序列化和反序列化。

来源: spring-web/src/main/java/org/springframework/web/client/RestTemplate.java206-273 spring-web/src/main/java/org/springframework/http/converter/support/AllEncompassingFormHttpMessageConverter.java104-161

配置基础设施

Spring MVC 的配置围绕 WebMvcConfigurationSupport 展开,它注册并配置所有必要的 MVC 组件。应用程序通常使用 @EnableWebMvc,它会导入 DelegatingWebMvcConfiguration

来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java125-200 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/DelegatingWebMvcConfiguration.java44-56

处理器映射和适配器

WebMvcConfigurationSupport 以特定顺序注册了多个 HandlerMapping 实例

顺序处理器映射目的
-1RouterFunctionMapping映射路由函数
0RequestMappingHandlerMapping映射 @RequestMapping 注解的方法
1视图控制器映射直接 URL 到视图的映射
2BeanNameUrlHandlerMapping映射 URL 到 Bean 名称
Integer.MAX_VALUE-1资源处理器映射提供静态资源
Integer.MAX_VALUE默认 Servlet 映射转发到默认 Servlet

来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java133-147

消息转换器配置

配置根据类路径依赖自动检测并注册消息转换器

来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java203-260 spring-web/src/main/java/org/springframework/web/client/RestTemplate.java164-185

请求处理管道

Spring MVC 通过一个定义良好的管道处理传入的 HTTP 请求,该管道涉及处理器映射、适配器和解析器

RequestMappingHandlerAdapter 负责处理 @RequestMapping 注解的控制器方法的调用,管理参数解析、返回值处理和异常处理。

来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java684-734

与 Spring 核心的集成

Spring MVC 与 Spring 的核心容器及支持服务深度集成

WebMvcConfigurationSupport 类创建了用于转换服务、验证、内容协商和路径匹配的 Bean,这些 Bean 在整个 MVC 基础设施中共享。

来源: spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java744-758 spring-webmvc/src/main/java/org/springframework/web/servlet/config/annotation/WebMvcConfigurationSupport.java457-497