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之常用组件及执行流程的更多相关文章

  1. SpringMVC源码剖析1——执行流程

    SpringMVC源码剖析1——执行流程 00.SpringMVC执行流程file:///C:/Users/WANGGA~1/AppData/Local/Temp/enhtmlclip/Image.p ...

  2. SpringMVC 学习笔记(十一) SpirngMVC执行流程

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvYTY3NDc0NTA2/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA ...

  3. 通过一个模拟程序让你明白WCF大致的执行流程

    原文http://www.cnblogs.com/artech/archive/2011/12/07/wcf-how-to-work.html 在<通过一个模拟程序让你明白ASP.NET MVC ...

  4. SpringMVC架构&组件&执行流程

    SpringMVC架构: 组件: DIspatcherServlet:前端控制器.相当于mvc模式的c,是整个流程控制的中心,负责调用其他组件处理用户的请求,降低了组件之间的耦合性. HandlerM ...

  5. Spring MVC入门(一)—— SpringMVC的执行流程与常用注解

    一.什么是SpringMVC SpringMVC就是类似于Struts2的mvc框架,属于SpringFrameWork的后续产品.在模型层中与视图层的交互部分. springMVC执行流程: 二.常 ...

  6. springMVC的架构与执行流程

    SpringMVC术语 前端控制器(DispatcherServlet):接收请求,响应结果,相当于电脑的CPU. 处理器映射器(HandlerMapping):根据URL去查找处理器 处理器(Han ...

  7. springMVC执行流程及架构

    目录 springMVC简单执行流程 springMVC框架 注解实现 springMVC简单执行流程 springMVC框架 执行流程: 1.用户发送请求至前端控制器DispatcherServle ...

  8. springmvc与struts2执行流程比较

    之前写过一篇struts2的执行流程的文章了,这里对struts2的流程就不做过多的分析,这篇文章主要分析spring-mvc的执行流程以 及struts2与spring-mvc的差别. 1.stru ...

  9. SpringMVC执行流程及源码分析

    SpringMVC流程及源码分析 前言 ​ 学了一遍SpringMVC以后,想着做一个总结,复习一下.复习写下面的总结的时候才发现,其实自己学的并不彻底.牢固.也没有学全,视频跟书本是要结合起来一起, ...

  10. SpringMVC的执行流程

    解析SpringMVC执行流程 SpringMVC的执行图大概如下所示 1.首先它是由客户端发起请求,到DispatcherServlet,被拦截后到HandlerMapping这里充当一个路由器,通 ...

随机推荐

  1. 剑指Offer-59.按之字形顺序打印二叉树(C++/Java)

    题目: 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推. 分析: 实际上是二叉树的层次遍历,只不过每一行 ...

  2. C#.NET 简单使用log4net

    1.nuget 中安装log4net 2.添加一个配置文件"log4net2.config",内容如下: <?xml version="1.0" enco ...

  3. 开源高性能结构化日志模块NanoLog

      最近在写数据库程序,需要一个高性能的结构化日志记录组件,简单研究了一下Microsoft.Extensions.Logging和Serilog,还是决定重造一个轮子. 一.使用方法   直接参考以 ...

  4. Chapter1 p2 vec

    在上一小节中,我们完成了对BMPImage类的构建,成功实现了我们这个小小引擎的图像输出功能. 你已经完成了图像输出了,接着就开始路径追踪吧... 开个玩笑XD 对于曾经学习过一些图形学经典教材的人来 ...

  5. python pymysql 数据库查询操作

    import pymysql db= pymysql.connect(host="", user='', database="", password='') c ...

  6. Luban小试牛刀

    Luban小试牛刀 LubanUnity LubanUnity配置工具配置解决方案 简介 Github  文档   视频教程  Unity工具 个人感觉挺强大,便捷的,适合中大型游戏项目的配置工作.小 ...

  7. 《Vue3.x +TpyeScript实践指南》勘误

    图书出版已有一段时间,书中已发现错误如下: 书的第14页,倒数第3行,npm init -y命令中,init和-y之间应该有个空格: 书的第32页,代码的第1行,应该为模板字符串符号 `,我看印刷的是 ...

  8. java并发的发布和订阅测试

    现在编码的时候,为了处理消息,大家动不动就上个重器,例如MQ之类的.但很多时候,并不是那么有必要,因为数据量和并发其实远远不够. 可以替代的方案非常多,其中一个是java.util.concurren ...

  9. Electron 的 安装

    背景 因为搞嵌入式开发的时候,每次烧写不同版本的固件的时候,经常需要重命名,有时候烧错版本我也不知道: 因此我认为对固件的管理比较麻烦,所以我希望能够有一个比较好的工具来做管理,找了一圈没有发现合适的 ...

  10. 关于docker-compose up -d 出现超时情况处理

    由于要搭建一个ctf平台,用docker一键搭建是出现超时情况 用了很多办法,换源,等之类的一样没办法,似乎它就是只能用官方那个一样很怪. 只能用一种笨办法来处理了,一个个pull. 打个比如: 打开 ...