spring MVC 生命周期

本文详细解析了SpringMVC框架的请求处理流程,从请求到达前端控制器DispatcherServlet开始,到控制器处理请求,再到视图渲染输出的过程。涉及处理器映射、视图解析等关键步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

                               Spring MVC 的生命周期

其实就是跟踪前台发送请求到后台再到响应的一个过程

下图是请求所经历的所有的站点

下面根据请求经过站点的顺序,开始分析:

1、刚刚离开浏览器的请求

首先,请求一般会存在两种信息:一种是包含请求的URL,一种则是内容信息(如:提交的表单信息)

此过程是请求进入到一个前端控制器DispatcherServlet

DispatcherServlet其实它本质上就是一个单例的Servlet,它的功能是将请求委托给应用程序的其他组件来执行实际的处理。

2、前端控制器:该把请求发送到哪个控制器

一个典型的应用程序中可能会有多个控制器。

DispatcherServlet需要知道应该把当前的请求发送到哪个控制器下,这个时候它回去查询一个或多个处理器映射(handler mapper)。

处理器映射会根据请求所携带的URL来进行决策,然后将结果返回给DispatcherServlet。

3、终于到了控制器

DispatchServlet经过第二站已经从处理器映射那知道了应该将请求发送到哪个控制器下。

DispatchServlet将当前的请求发送至指定的控制器下,请求会将内容信息交给控制器,并耐心等待控制器将内容处理后的结果。

请注意:设计良好的控制器很少甚至基本上不会做处理内容信息的工作,而是将其委托给一个或多个服务对象去处理。

4、处理完了,该回去了

控制器完成信息业务逻辑处理后,通常会产生一些信息,这些信息需要返回给用户并在浏览器上显示。

这些信息被称为模型(Model)。

我们不能把直接把模型返回,需要经过以用户友好的方式进行格式化(通常情况下是HTML),所以信息需要发送给一个视图(View),通常会是JSP。

控制器所做的最后一件事就是将数据打包,并且标示出用于渲染输出的视图名。它接下来会将请求连同模型和视图名发送回DispatchServlet。

注意:传递给DispatchServlet的视图名并不直接表示某个特定的JSP。实际上,它都不能确定视图就是JSP。它仅仅是传递了一个逻辑名称,这个结果将用来查找产生结果的真正视图。

5、真正的视图在那里

由上一步我们会知道DispatchServlet获得了视图名,确切的说是逻辑视图名。

DispatchServlet使用视图解析器,视图解析器对逻辑视图名进行解析,匹配为一个特定视图的实现。

然后将这个特定的视图返回给DispatchServlet。

6、视图的实现

由上一步我们知道,DispatcherServlet已经知道是哪个视图。

这一步主要将视图进行实现,在这里它交付数据模型。

7、渲染输出

视图将使用模型数据渲染输出,这个输出会通过响应对象传递给客户端。

 

 

 

 

### Spring MVC 框架的生命周期 Spring MVC 是一个基于 Java 的轻量级 Web 框架,其生命周期描述了从请求到达服务器到响应返回客户端的整个过程。以下是 Spring MVC 生命周期的详细说明: #### 1. 请求到达 当客户端发送 HTTP 请求时,该请求首先被 Servlet 容器(如 Tomcat)接收并传递给 `DispatcherServlet`[^2]。 #### 2. DispatcherServlet 处理请求 `DispatcherServlet` 是 Spring MVC 的前端控制器,负责接收所有进入的 HTTP 请求,并将其分发给适当的处理器。它根据配置文件或注解找到合适的处理器映射器(HandlerMapping)[^2]。 #### 3. HandlerMapping 确定处理器 `HandlerMapping` 接口用于将请求映射到具体的处理器(Controller)。Spring MVC 提供了多种实现方式,例如基于注解的 `RequestMappingHandlerMapping` 和基于 XML 配置的 `BeanNameUrlHandlerMapping`[^2]。 #### 4. 调用处理器适配器 一旦确定了处理器,`DispatcherServlet` 将调用相应的处理器适配器(HandlerAdapter),以执行实际的业务逻辑。处理器适配器负责调用目标控制器的方法[^2]。 #### 5. 控制器处理请求 控制器(Controller)是业务逻辑的核心部分。它接收请求参数、执行业务逻辑,并返回模型和视图信息。如果使用异步请求处理,则控制器方法可以返回 `Callable` 或其他异步支持的类型[^1]。 #### 6. 返回模型和视图 控制器方法返回一个 `ModelAndView` 对象,其中包含模型数据和视图名称。模型数据会被传递给视图进行渲染[^2]。 #### 7. 视图解析器解析视图 `ViewResolver` 接口负责将逻辑视图名称解析为具体的视图对象。Spring MVC 提供了多种视图解析器实现,例如 `InternalResourceViewResolver` 和 `ThymeleafViewResolver`。 #### 8. 渲染视图 解析后的视图对象会使用模型数据渲染最终的 HTML 页面或其他格式的响应内容。渲染完成后,结果将通过 `DispatcherServlet` 返回给客户端[^2]。 #### 9. 响应返回 `DispatcherServlet` 将生成的响应内容写入 HTTP 响应流中,最终返回给客户端。 --- ### 异常处理 在生命周期的任何阶段,如果发生异常,Spring MVC 会通过全局异常处理器(`@ControllerAdvice` 或 `HandlerExceptionResolver`)捕获并处理异常[^2]。 --- ### 相关接口与机制 - **Aware 接口**:某些 Bean 可以实现 `Aware` 接口,通过回调机制获取 Spring 容器中的特定对象,例如 `ApplicationContextAware` 或 `ServletContextAware`[^3]。 - **过滤器链**:通过 `DelegatingFilterProxy`,可以在应用上下文中定义多个过滤器并形成链式调用[^4]。 --- ### 示例代码 以下是一个简单的控制器示例,展示了 Spring MVC 的基本工作流程: ```java @Controller public class ExampleController { @GetMapping("/example") public String handleRequest(Model model) { model.addAttribute("message", "Hello, Spring MVC!"); return "exampleView"; // 返回逻辑视图名 } } ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值