15、SpringMVC之常用组件及执行流程
15.1、常用组件
15.1.1、 DispatcherServlet
DispatcherServlet 是前端控制器,由框架提供,不需要工程师开发;
作用:统一处理请求和响应,整个流程控制的中心,由它调用其它组件处理用户的请求。
15.1.2、HandlerMapping
HandlerMapping 是处理器映射器,由框架提供,不需要工程师开发;
作用:根据请求的 url、method 等信息去查找 Handler(即控制器方法)。
15.1.3、Handler
Handler 是处理器(即控制器方法),需要工程师开发;
作用:对匹配的用户请求进行具体处理。
15.1.4、HandlerAdapter
HandlerAdapter 是处理器适配器,由框架提供,不需要工程师开发;
作用:通过 HandlerAdapter 来调用处理器(即控制器方法)。
15.1.5、ViewResolver
ViewResolver 是视图解析器,由框架提供,不需要工程师开发;
作用:进行视图解析,得到相应的视图,例如:ThymeleafView、InternalResourceView、RedirectView。
15.1.6、View
View 是视图,,需要工程师开发;
作用:将共享域中的数据通过页面展示给用户。
15.2、执行流程
用户向服务器发送请求,请求被 SpringMVC 的前端控制器 DispatcherServlet 捕获;
DispatcherServlet 对请求 URL 进行解析,得到 URI ,判断请求 URI 对应的映射是否存在;
如果请求 URI 对应的映射不存在:
再判断是否配置了 mvc:default-servlet-handler :
如果没配置,则控制台日志显示找不到请求对应的目标资源,客户端展示404错误;
如果有配置,则访问目标资源(一般为静态资源,如:JS,CSS,HTML);若目标资源不存在,客户端也会展示404错误。
如果请求 URI 对应的映射存在,则执行以下流程:
根据该 URI ,调用 HandlerMapping 获得该 Handler 配置的所有相关的对象(包括Handler对象以及对应的拦截器),
最后以 HandlerExecutionChain (处理器执行链对象)的形式返回;DispatcherServlet 根据获得的 Handler ,选择一个合适的 HandlerAdapter ;
如果成功获得了 HandlerAdapter ,此时将开始执行对应拦截器的 preHandler() 方法【正向】;
提取 Request (请求)中的数据,填充到 Handler 的入参,开始执行 Handler(控制器方法)对用户请求进行具体处理;
在填充 Handler 的入参过程中,根据控制器方法的配置,Spring将帮忙做一些额外的工作:HttpMessageConverter(常用): 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
数据转换(常用):对请求消息进行数据转换,如将 String 转换成 Integer、Double 等
数据格式化(少用):对请求消息进行数据格式化,如将字符串转换成格式化数字或格式化日期等
数据验证(少用):验证数据的有效性(长度、格式等),验证结果存储到 BindingResult 或 Error 中
Handler 执行完成后,向 DispatcherServlet 返回一个 ModelAndView 对象;
(此时会判断 Handler 执行是否存在异常,如果存在异常,则执行 HandlerExceptionResolver 进行异常处理)如果 Handler 执行不存在异常,则执行对应拦截器的 postHandle() 方法【逆向】,存在异常则跳过该步骤;
根据返回的ModelAndView 选择一个适合的 ViewResolver 进行视图解析,根据 Model 和 View 来渲染视图;
渲染视图完毕后,执行对应拦截器的 afterCompletion() 方法【逆向】;
将渲染结果返回给客户端。

15、SpringMVC之常用组件及执行流程的更多相关文章
- SpringMVC源码剖析1——执行流程
SpringMVC源码剖析1——执行流程 00.SpringMVC执行流程file:///C:/Users/WANGGA~1/AppData/Local/Temp/enhtmlclip/Image.p ...
- SpringMVC 学习笔记(十一) SpirngMVC执行流程
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...
- 通过一个模拟程序让你明白WCF大致的执行流程
原文http://www.cnblogs.com/artech/archive/2011/12/07/wcf-how-to-work.html 在<通过一个模拟程序让你明白ASP.NET MVC ...
- SpringMVC架构&组件&执行流程
SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...
- Spring MVC入门(一)—— SpringMVC的执行流程与常用注解
一.什么是SpringMVC SpringMVC就是类似于Struts2的mvc框架,属于SpringFrameWork的后续产品.在模型层中与视图层的交互部分. springMVC执行流程: 二.常 ...
- springMVC的架构与执行流程
SpringMVC术语 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMapping):根据URL去查找处理器 处理器(Han ...
- springMVC执行流程及架构
目录 springMVC简单执行流程 springMVC框架 注解实现 springMVC简单执行流程 springMVC框架 执行流程: 1.用户发送请求至前端控制器DispatcherServle ...
- springmvc与struts2执行流程比较
之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...
- SpringMVC执行流程及源码分析
SpringMVC流程及源码分析 前言 学了一遍SpringMVC以后,想着做一个总结,复习一下.复习写下面的总结的时候才发现,其实自己学的并不彻底.牢固.也没有学全,视频跟书本是要结合起来一起, ...
- SpringMVC的执行流程
解析SpringMVC执行流程 SpringMVC的执行图大概如下所示 1.首先它是由客户端发起请求,到DispatcherServlet,被拦截后到HandlerMapping这里充当一个路由器,通 ...
随机推荐
- .NET程序对接 OpenTelemetry logs
OpenTelemetry 简介 OpenTelemetry 是一个由 CNCF(Cloud Native Computing Foundation)托管的开源项目,旨在为观察性(Observabil ...
- itestwork(爱测试) 一站式接口测试&敏捷测试工作站 9.0.1 发布,ui 及Bug fix
(一)itest 简介 itest work (爱测试) 一站式工作站让测试变得简单.敏捷.itest work 包含极简的任务管理,测试管理,缺陷管理,测试环境管理,接口测试,接口Mock 6合1 ...
- grid 布局兼容性问题
低版本的安卓机上是不生效的 代码 .grid_4 { display: grid; grid-template-columns: repeat(4, 1fr); grid-template-rows: ...
- wordpress博客系统
wordpress博客系统 LNMP:Linux+nginx+mysql+php 一个操作系统+web网站+一个数据库存放数据+后端编程语言 基于红帽操作系统来搭建 1.需要一个本地yum仓库 [ro ...
- NumPy 通用函数(ufunc):高性能数组运算的利器
NumPy 通用函数(ufunc) 简介 NumPy 通用函数(ufunc),代表"通用函数",是一类用于对 ndarray 对象进行逐元素运算的高性能函数.ufunc 使 Num ...
- Flarum 安装和使用教程
随着开源社区的日益繁荣,人们对社区品质的要求也越来越高.传统的 BBS 论坛模式已经难以满足现代用户对美观.便捷.互动性的需求.搭建一个现代化的高品质社区,成为许多网站管理者的迫切需求和共同挑战. 今 ...
- Java映射 转换post response T data
Java映射 转换post response data 接上篇Java泛型对象在http请求和响应对象中的封装https://www.cnblogs.com/oktokeep/p/17688322.h ...
- FolkMQ 1.6.0(纯血国产,适合信创)
FolkMQ 是个"新式"的消息中间件.强调:"简而强".可内嵌,可单机,可集群(部署包为 9Mb). 功能简表 角色 功能 生产者(客户端) 发布普通消息.Q ...
- k8s中的亲和性、污点与容忍(调度到不同的宿主机)
本文章并未经过严格实践,如有错误,辛苦指出. 背景 服务需要多副本,来保证高可靠.多活. 那么问题来了,假如这些副本都在同一个宿主机上,或者同一个交换机下-宿主机.交换机其中一项坏掉了,那多副本还有什 ...
- airflow(二)集成EMR使用
1. 准备工作 1.1. 安装并初始化airflow,参考以下文档: https://www.cnblogs.com/zackstang/p/11082322.html 其中还要额外安装的是: sud ...