说说 Spring MVC 的执行流程

devtools/2025/2/28 8:29:26/

Spring MVC 是一个基于 Java 的轻量级、开源的 Web 框架,用于构建 Web 应用程序。它通过将请求处理的各个阶段解耦,使得开发更加灵活和模块化。以下是 Spring MVC 的执行流程,从用户发起请求到返回响应的整个过程:

---

### 1. 用户发起请求
用户通过浏览器或其他客户端工具向服务器发送一个 HTTP 请求,请求被发送到服务器的某个端口。

---

### 2. 请求到达前端控制器(DispatcherServlet)
Spring MVC 的核心组件是 `DispatcherServlet`,它是一个前端控制器,用于拦截所有进入应用的请求。`DispatcherServlet` 是 Spring MVC 的入口点,它负责将请求分发到合适的处理器(Controller)。

- **DispatcherServlet 的作用**:
  - 初始化 Spring MVC 的上下文(`WebApplicationContext`)。
  - 加载配置文件(如 `dispatcher-servlet.xml` 或注解配置)。
  - 将请求分发到具体的处理器。

---

### 3. 请求映射到处理器(Handler)
`DispatcherServlet` 通过 `HandlerMapping` 将请求映射到具体的处理器(Controller)。`HandlerMapping` 是一个接口,用于定义请求与处理器之间的映射关系。

- **映射方式**:
  - **基于注解**:使用 `@Controller` 和 `@RequestMapping` 注解。
  - **基于 XML 配置**:在 `dispatcher-servlet.xml` 中定义 `<bean>` 和 `<bean>` 的映射规则。

---

### 4. 执行处理器适配器(HandlerAdapter)
`HandlerAdapter` 是一个适配器接口,用于调用处理器(Controller)中的方法。它负责处理不同类型的处理器(如注解方式或接口方式)。

- **适配器的作用**:
  - 根据处理器的类型(如注解方式的 `@Controller` 或接口方式的 `Controller`),找到合适的适配器。
  - 调用处理器中的方法,并将请求参数传递给处理器。

---

### 5. 处理器(Controller)执行业务逻辑
处理器(Controller)是实际处理请求的组件。它接收请求参数,调用业务逻辑层(Service)的方法,并返回一个 `ModelAndView` 对象。

- **`ModelAndView`**:
  - 包含模型数据(Model)和视图信息(View)。
  - 模型数据用于传递给视图层,视图信息用于指定返回的页面。

---

### 6. 视图解析器(ViewResolver)解析视图
`ViewResolver` 是一个视图解析器,用于将视图名称解析为具体的视图资源(如 JSP 页面、Thymeleaf 模板等)。

- **解析过程**:
  - 根据 `ModelAndView` 中的视图名称,结合配置的视图前缀和后缀,找到对应的视图资源。
  - 例如,视图名称为 `index`,前缀为 `/WEB-INF/views/`,后缀为 `.jsp`,则解析为 `/WEB-INF/views/index.jsp`。

---

### 7. 渲染视图
视图解析器找到视图资源后,将模型数据填充到视图中,生成最终的响应内容。

- **渲染过程**:
  - 视图模板(如 JSP、Thymeleaf)会根据模型数据动态生成 HTML 内容。
  - 如果是 RESTful API,视图可能是一个 JSON 或 XML 格式的响应。

---

### 8. 返回响应
最终,渲染后的视图内容被发送回客户端,用户可以看到页面或接收到响应数据。

---

### 总结
Spring MVC 的执行流程可以概括为以下步骤:
1. 用户请求到达 `DispatcherServlet`。
2. `HandlerMapping` 将请求映射到处理器(Controller)。
3. `HandlerAdapter` 调用处理器的方法。
4. 处理器执行业务逻辑,返回 `ModelAndView`。
5. `ViewResolver` 解析视图。
6. 视图渲染并生成响应。
7. 响应返回客户端。

通过这种分层和解耦的设计,Spring MVC 提高了代码的可维护性和可扩展性,同时也使得开发更加灵活和高效。


http://www.ppmy.cn/devtools/163308.html

相关文章

图片爬取案例

修改前的代码 但是总显示“失败” 原因是 修改之后的代码 import requests import os from urllib.parse import unquote# 原始URL url https://cn.bing.com/images/search?viewdetailV2&ccidTnImuvQ0&id5AE65CE4BE05EE7A79A73EEFA37578E87AE19421&thidOIP.TnI…

毛泽东思想“活的灵魂”

关于毛泽东思想“活的灵魂”的构成及其内涵&#xff0c;综合历史文献与权威表述&#xff0c;核心内容整理如下&#xff1a; 一、毛泽东思想活的灵魂的权威定义 根据十一届六中全会《关于建国以来党的若干历史问题的决议》&#xff08;1981年&#xff09;&#xff0c;毛泽东思想…

机器学习数学基础:33.肯德尔和谐系数教程

肯德尔和谐系数教程 一、定义与用途 肯德尔和谐系数&#xff08;Kendall’s W&#xff09;是一种用于衡量多个评价者对一组对象进行评价时&#xff0c;评价结果一致性程度的统计量。它的取值范围在0到1之间。当W \ 0时&#xff0c;表示评价者之间的评价完全不一致&#xff1…

Spring Boot启动过程?

目录 1. 启动入口 2. SpringApplication 初始化 3. 准备环境 4. 创建应用上下文(ApplicationContext) 5. 准备应用上下文 6. 刷新应用上下文 7. 启动 Web 服务器(若为 Web 应用) 8. 发布 ApplicationStartedEvent 事件 9. 执行 Runner 10. 发布 ApplicationReady…

macos下cocoapods的学习

step1&#xff1a;升级ruby $ /bin/bash -c " $ (curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" $ brew update $ brew install ruby $ echo export PATH"/usr/local/opt/ruby/bin:$PATH" >> ~/.bash_profile …

STM32编译过程

STM32编译过程 1. 编译过程介绍2. 程序的组成、存储与运行3. 编译工具链3.1 armcc 工具3.2 armasm 工具3.3 armlink 工具3.4 armar 工具3.5 fromelf 工具 4. MDK工程的文件类型 1. 编译过程介绍 编译MDK 软件使用的编译器是 armcc 和 armasm&#xff0c;它们根据每个 c/c 和汇编…

MAC 安装Tensorflow简单方法

MacOS M1 pro安装tensorflow 1、环境配置&#xff08;必需&#xff09; PYTHON版本&#xff1a;3.11.0&#xff0c;python采用homebrew安装。&#xff08;已有python或更高版本可跳过&#xff0c;更高版本未经过测试&#xff0c;题主自认为可行&#xff09; brew install pyt…

AWS S3 如何设置公开访问权限?

1.让整个bucket都有公开访问权限 1.1关闭【阻止公共读】 1.2关闭ACL访问控制 1.3打开桶策略 这样桶内所有的图片就能访问了 2.只开放特定文件让其具有访问权限&#xff1f; 2.1关闭【阻止公共读】 如之前的图示 2.2打开ACL控制 2.3单个文件打开公共读