详解SpringMVC执行流程[通俗易懂]

详解SpringMVC执行流程[通俗易懂]SpringMVC执行流程SpringMVC执行流程整体如下:执行流程分析(1)浏览器提交请求到中央调度器。(2)中央调度器直接将请求转给处理器映射器。(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。(5)处理器适配器调用执行处理器。(6)处理器将处理结果及要跳转的视图封装到一个对象ModelAndView中,并将其返回给处理器适配器。(7)处理器适配

大家好,又见面了,我是你们的朋友全栈君。

SpringMVC 执行流程

SpringMVC 执行流程整体如下:
{% asset_img mvc02.jpg %}

执行流程分析

(1)浏览器提交请求到中央调度器。
(2)中央调度器直接将请求转给处理器映射器。
(3)处理器映射器会根据请求,找到处理该请求的处理器,并将其封装为处理器执行链后返回给中央调度器。
(4)中央调度器根据处理器执行链中的处理器,找到能够执行该处理器的处理器适配器。
(5)处理器适配器调用执行处理器。
(6)处理器将处理结果及要跳转的视图封装到一个对象 ModelAndView 中,并将其返回给处理器适配器。
(7)处理器适配器直接将结果返回给中央调度器。
(8)中央调度器调用视图解析器,将 ModelAndView 中的视图名称封装为视图对象。
(9)视图解析器将封装了的视图对象返回给中央调度器。
(10)中央调度器调用视图对象,让其自己进行渲染,即进行数据填充,形成响应对象。
(11)中央调度器响应浏览器。

执行流程中的 API 简要说明

1. DispatcherServlet

中央调度器,也称为前端控制器,在 MVC 架构模式中充当控制器 C, DispatcherServlet 是整个流程的控制中心,由它调用诸如处理器映射器、处理器适配器、视图解析器等其它组件处理用户请求。 中央调度器的存在降低了组件之间的耦合度。

2. HandlerMapping

处理器映射器, 负责根据用户请求找到相应的将要执行的 Handler,即处理器。 即用于完成将用户请求映射为要处理该请求的处理器,并将处理器封装为处理器执行链传给中央调度器。

3. HandlAdapter

处理器适配器, 通过 HandlerAdapter 对处理器进行执行,这是适配器模式的应用,通过扩展适配器可以对更多类型的处理器进行执行。 中央调度器会根据不同的处理器自动为处理器选择适配器,以执行处理器。

4. Handler

处理器,也称为后端控制器,在 DispatcherServlet 的控制下 Handler 调用 Service 层对具体的用户请求进行处理。由于 Handler 涉及到具体的用户业务请求,所以一般情况下需要程序员根据业务需求自己开发 Handler。

5. ViewResolver

视图解析器, 负责将处理结果生成 View 视图, ViewResolver 首先将逻辑视图名解析为物理视图名,即具体的页面地址,再生成 View 视图对象。最后将处理结果通过页面形式展示给用户。
SpringMVC 框架提供了很多的 View 视图类型,包括: JstlView、 RedirectView 等。一般情况下需要通过页面标签或页面模版技术将模型数据通过页面展示给用户,需要由程序员根据业务需求开发具体的页面。

DispatcherServlet 默认配置

组件名称 默认值
处理器映射器 BeanNameUrlHandlerMappering
DefaultAnnotationHandlerMapping
处理器适配器 HttpRequestHandlerAdaper
SimpleControllerHandlerAdaper
AnnotationMethodHandlerAdaper
视图解析器 InternalResourceViewResolver
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/154112.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月28日 上午8:46
下一篇 2022年6月28日 上午9:00


相关推荐

  • DotNetTextBox组件

    DotNetTextBox组件1 文件上传类型及上传大小限制修改 system dntb uploadconfig 里面的配置 2 修改配置加载 system dntb 只一次 system dntb 文件夹放在主目录下修改 Web config 配置代码 appSettings SQLServer lt appSettings

    2026年3月26日
    2
  • MySQL 修改字段类型或长度

    MySQL 修改字段类型或长度mysql>altertable表名modifycolumn字段名类型;例如数据库中address表city字段是varchar(30)修改类型可以用(谨慎修改类型,可能会导致原有数据出错)mysql> altertableaddressmodifycolumncitychar(30);修改长度可以用(修改长度,要保证不短与已有数据,以保证原有数

    2022年4月30日
    211
  • Exploring Message Brokers: RabbitMQ, Kafka, ActiveMQ, and Kestrel–reference

    Exploring Message Brokers: RabbitMQ, Kafka, ActiveMQ, and Kestrel–reference

    2021年9月2日
    54
  • 又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?

    又被鹅厂问懵逼了:TCP 四次挥手收到乱序的 FIN 包会如何处理?大家好,我是小林。收到个读者的问题,他在面试鹅厂的时候,被搞懵了,因为面试官问了他这么一个网络问题:不得不说,鹅厂真的很喜欢问网络问题,而且爱问异常情况下的网络问题,之前也有篇另外一个读者面试鹅厂的网络问题:「被鹅厂面怕了!」。不过这道鹅厂的网络题可能是提问的读者表述有问题,因为如果FIN报文比数据包先抵达客户端,此时FIN报文其实是一个乱序的报文,此时客户端的TCP连接并不会从FIN_WAIT_2状态转换到TIME_WAIT状态。因此,我们要关注到点是看「在FIN_WAI

    2022年5月8日
    48
  • 人们的Live Meeting系列 (floyd)

    人们的Live Meeting系列 (floyd)

    2022年1月16日
    50
  • 【AS】Windows10下Git环境变量配置

    很久没用回Windows了,最近因为工作原因又回归到Windows的怀抱,配置完AS的开发环境后使用Git管理本地代码时提示:’git’不是内部或外部命令,也不是可运行的程序或批处理文件。去百度大概搜了一下,是因为没有配置Git环境变量的原因,但是没有具体的解决步骤,特此记录一下.(PS:如何下载和安装就不具体赘述了,直接百度Git就能下载,安装教程请点击参考)一.确定G…

    2022年4月4日
    165

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号