Spring Web MVC工作流

本文详细介绍了SpringWebMVC框架的各个组件及其工作原理,包括派遣器处理器、处理器映射、处理器适配器、处理器对象、视图解析器和视图对象,以及组件间的协调通信流程。

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

本文将描述 Spring Web MVC 的各个组件,组件接口,以及各个组件之间如何协调通信,进而理解 Spring Web MVC 框架的基本工作原理。

组件及组件接口

Spring Web MVC 是由若干组件组成的,这些组件相互独立又相互协调工作共同完成 Spring
Web MVC 工作流。

1. 派遣器处理器(前置控制器) Servlet 对象(DispatcherServlet)

派遣器处理器 Servlet 对象(Dispatcher Servlet)是 Spring Web MVC 中最核心组件,派遣器处理器对象(Dispatcher Servlet)最终继承自 HttpServlet 对象。

2. 处理器映射对象(HandlerMapping)

处理器映射对象(HandlerMapping)是用于映射一个请求对象(Request)到一个处理器对象(Handler) 。

接口如下图:
这里写图片描述

3. 处理器适配器对象(HandlerAdaptor)

处理器适配器(HandlerAdaptor)是用来转接一个控制流到一个指定类型的处理器对象(Handler) 。一个类型的处理器对象(Handler)通常会对应一个处理器适配器对象(HandlerAdaptor)的一个实现。

接口定义如下:
这里写图片描述
在这个接口中,通过输入一个处理器对象(Handler)给 supports()方法,这个方法就会返回是否支持这个处理器。 handle()方法会传递控制权给处理器对象(Handler)。当处理器对象(Handler)处理这个 HTTP 请求后返回数据模型和逻辑视图名称的组合对象,处理器适配器会把这个返回结果进而返回给派遣器 Servlet(DispatcherServlet)。getLastModified 方法是用来处理一个带有 lastModified 头信息的 HTTP 请求的。

4. 处理器对象 - 控制器对象(Handler - Controller)

处理器对象(Handler)是用于处理业务逻辑的一个基本单元。它通过传入的 HTTP 请求对象(HttpServletRequese)来决定如何处理业务逻辑和执行哪些服务。

接口如下图:
这里写图片描述
handleRequest()方法会返回一个处理后的模型
数据和逻辑视图名的组合对象。这个对象将通过处理器适配器(HandlerAdapter)进而返回给派遣器 Servlet(DispatcherServlet)。

5. 视图解析器对象(ViewResolver)

视图解析器对象(ViewResolver)是用于映射一个逻辑视图名称到一个真正的视图对象(View) 。

接口如下:
这里写图片描述
在这个接口中,resolveViewName 方法,这个方法就会返回一个事实上的物理视图对象(View) 。

5. 视图对象(View)

View 是用来把模型数据通过某种显示方式反馈给客户,通常是通过执行 JSP 页面来完成的。

接口如下图:
这里写图片描述
在这个接口中,这个组件就会把模型 Map 通过一定的显示方式包含到客户的 HTTP 响应对象(HttpServletResponse),这就是提供给用户请求的最终响应。getContentType()能够返回这个视图所支持的内容类型,例如,XML, JSON,text/html 等等。

组件间的协调通信

这里写图片描述

众所周知,一个 HTTP 请求发送到 Web 容器,Web 容器就会封装一个 HTTP 请求对象(HttpServletRequest),这个对象包含所有的 HTTP 请求信息, 同 时 , Web 容 器 会 创 建 一 个 HTTP 响 应 对 象(HttpServletResponse) ,用以发送 HTTP 响应给客户端用户。然后,Web 容器传递 HTTP请求对象(HttpServletRequest)和 HTTP 响应对象(HttpServletResponse)给 Servlet 对象的service()方法。

实际上,Spring Web MVC 的入口就是一个客户化的 Servlet,称为派遣器 Servlet 对象(DispatcherServlet)。这个派遣器 Servlet 对象(DispatcherServlet)得到 HTTP 请求对象(HttpServletRequest)和HTTP响应对象 (HttpServletResponse) 后, 一个典型的Spring Web MVC工作流就开始了。

派遣器 Servlet 对象(DispatcherServlet)首先查找所有注册的处理器映射器对象(HandlerMapping) ,然后,遍历所有的处理器映射器对象(HandlerMapping) ,直到一个处理 器 映 射 器 对 象 ( HandlerMapping ) 返 回 一 个 非 空 的 处 理 器 执 行 链 对 象(HandlerExecutionChain)。那么,处理器执行链对象(HandlerExecutionChain)就包含着一个需要处理当前 HTTP 请求的一个处理器对象(Handler) 。如图表 3-6 第 1 步。

这里,一个处理器对象(Handler)被设计成了一个通用的对象类型,所以,这里需要一个处理器适配器(HandlerAdaptor)去派遣这个控制流到一个处理器对象(Handler),因为只有支持这种类型的处理器(Handler)的处理器适配器(HandlerAdapter)才知道如何去传递控制流给这个类型的处理器(Hanlder) 。

拿到了处理器对象(Hanlder)以后,派遣器 Servlet 对象(DispatcherServlet)则查找所有注册的处理器 适 配 器 对 象 ( HandlerAdapter) ,然 后 , 遍 历 所 有 的 处 理 器 适 配 器 对 象(HandlerAdapter)查询是否有一个处理器适配器对象(HandlerAdapter)支持这个处理器对象(Handler) 。如图表 3-6 第 2 步。

如 果 有 这 样 的 一 个 处 理 器 适 配 器 对 象 (HandlerAdapter) , 则 派 遣 器 Servlet 对 象(DispatcherServlet)将控制权转交给这个派遣器适配器对象(HandlerAdapter)。如图表 3-6第 3 步。派遣器适配器对象(HandlerAdapter)和真正的处理器对象(Handler)是成对出现的,所以, 这个支持的处理器适配器对象 (HandlerAdapter) 则知道如何去使用这个处理器(Handler)去处理这个请求。处理器适配器对象(HandlerAdapter) 将 传 递 HTTP 请 求 对 象 ( HttpServletRequest ) 和 HTTP 响 应 对 象(HttpServletResponse)给控制器,并且期待控制器返回模型和视图对象(ModelAndView) 。如图表 3-6 第 3.1 步。这个模型和视图对象(ModelAndView)对象包含着一组模型数据和视图逻辑名称,并且最终返回给派遣器 Servlet 对象(DispatcherServlet).

派遣器 Servlet 对象(DispatcherServlet)然后查找所有注册的视图解析器对象,并且遍历所有的视图解析器对象(ViewResolver) ,直到一个视图解析器对象(ViewResolver)返回一个物理的视图对象(View) 。如图表 3-6 第 4 步。

最后,派遣器 Servlet(DispatcherServlet)把得到的一组模型数据传递给得到的物理视图对象(View) 。如图表 3-6 第 5 步。然后,视图对象则会使用响应的表现层技术,把模型数据展现成 UI 界面,并且通过 HTTP 响应对象(HttpServletResponse)发送给 HTTP 客户。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值