SpringMVC 执行流程-图解

本文深入解析SpringMVC的工作流程,从请求被DispatcherServlet接收开始,到通过HandlerMapping找到处理器,再到HandlerAdapter执行处理,直至ModelAndView被ViewResolver解析渲染,最后返回给浏览器。详细阐述了各组件的作用及交互过程。
摘要由CSDN通过智能技术生成

在这里插入图片描述

关键点解析

② 号线

在这里插入图片描述

DispatcherServlet 需要获取一个执行链

DispatcherSevlet:核心控制器。

实质也是一个HttpServlet。负责将请求分发,所有的请求都有经过它来统一分发。

HandlerMapping:适配器,处理器映射管理

作用:根据【请求】找到【处理器Handler】,但并不是简单的返回处理器,而是
将处理器和拦截器封装,形成一个处理器执行链(HandlerExecuteChain)。

  • Handler:处理器(Controller的Bean本身和请求Method的包装)

  • HandlerExecutionChain:执行链(handler 的二次包装,将handler与拦截器链关联到了一起)

小结:

为什么要引入适配器(HandlerMapping)?

因为处理器(Handler)有很多种,DispatcherServlet没办法统一管理,所以出现了适配器。
让适配器统一处理 Handler,而DispatcherServlet统一处理适配器(HandlerMapping)。
根据请求去找对应的 Handler

注意:这里其实拿到的是 Handler(处理器) 的二次包装 HandlerExecutionChain(执行链)

③ 号线

在这里插入图片描述

DispatcherServlet 拿着执行链去寻找对应的处理器适配器(HandlerAdapter),拿到处理后返回的 ModelAndView

当handlerMapping 获取到执行请求的 controller 时,DispatcherServlte会根据 controller 对应的 controller 类型来调用相应的 HandlerAdapter 来进行处理。

HandlerAdapter:处理适配器,调用具体的方法对用户发来的请求来进行处理。处理的结果是返回 ModelAndView 。

④ 号线

在这里插入图片描述

Handler 执行完成后,向 DispatcherServlet 返回一个ModelAndView对象

HttpMessageConverter主要功能在于Java对象和Json Xml等Http消息格式之前的来回转换

HttpMessageConveter:Http消息转换器,将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息

  • 数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
  • 数据格式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
  • 数据验证:验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中

⑤ 号线

在这里插入图片描述

处理器适配器(HandlerAdapter)将处理好的ModelAndView返回给DispatcherServlet

ModelAndView:是代表了MVC Web程序中 Model 与 View的对象

小结:

为什么要返回 ModelAndView?

只是方便你一次返回这两个对象 Model 与 View 两者仍是分离的概念。

  • Model:模型,存储数据而且所有数据都是 model 中的 key,value 的关系
  • View:视图,作用是渲染模型数据,将模型里的数据以某种形式呈现给客户

⑥ 号线

在这里插入图片描述

ViewResolver:视图解析器。结合Model和View,来渲染视图(Model+View合成)

小结:

视图解析器到底做了什么?

视图解析器的主要作用就是将逻辑视图转换成用户可以看到的物理视图

下面举例说明逻辑视图物理视图

逻辑视图:success (例如你配了自定义视图解析器,返回时只用给页面名字)

物理视图:/WEB-INF/success.jsp

视图解析器将 success 这个字符串名字,进行前缀和后缀的拼接得到客户可以访问的页面完整地址名字 /WEB-INF/success.jsp

视图解析器和视图的关系是什么?

视图对象视图解析器负责实例化。举例几个常见的视图实现类:

在这里插入图片描述

⑦ 号线

在这里插入图片描述

Model 携带后台封装数据到页面,让 View 解析渲染出来

小结:

SpringMVC 到底在做什么?

MVC是软件工程中一种常用的规范的设计模式,model(模型层)-view(视图层)-controller(控制层)。

模型包括了你的数据模型(pojo或bean之类的东西)和业务模型(比如登陆,注册操作等),而 controller 层就是将你的 model 层能在 view 中表示出来

执行流程

  1. 浏览器发送一个请求,核心控制器(DispatcherSevlet)拦截所有的请求
  2. 核心控制器(DispatcherSevlet)拿到不同的请求,通过映射适配器(HandlerMapping),获取处理器执行链
  3. 核心控制器找到处理适配器(HandlerAdpater),让它处理执行链
  4. 消息转换器(HttpMessageConverter )处理一些列数据、消息
  5. 执行完毕的处理器(Handler)返回 ModelAndView 给适配器(HandlerAdpater),由适配器返回给核心控制器
  6. 核心控制器拿到将 ModelAndView 给到 视图解析器(ViewResolver)进行逻辑视图到物理视图的转换
  7. 核心控制器将 Model 数据渲染到 View
  8. 将最终渲染了 Model 数据的 View 响应给浏览器
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值