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. 微信小程序跳转重新加载目标页

    可用于在首次进入到小程序后就执行性了首页的onLoad方法,等你再去点击其它页面再回来的时候就不会加载onLoad了,比如你跳到登录页后再返回到首页会发现首页啥数据都没加载,所以你在登录那边进行跳转的 ...

  2. 安装配置intelli IDEA

    效果 操作 去官网下载安装包 下载 Intelli IDEA 下载插件 插件下载 打开IDEA安装目录下的bin目录,找到idea64.exe.vmoptions配置文件 添加配置 打开indea,添 ...

  3. docker ——网络配置和管理

    docker网络基础 了解docker网络 两种docker网络 单主机与多主机的docker网络 网络驱动 网络驱动 介绍 bridge 桥接网络,这是默认的网络驱动程序 host 主机网络 ove ...

  4. Java中可以用的大数据推荐算法

    在Java中实现大数据推荐算法时,通常会使用一些开源的机器学习库,如Apache Mahout.Weka.DL4J(DeepLearning4j,用于深度学习)或者Spark MLlib(用于在Spa ...

  5. LeetCode 451. Sort Characters By Frequency 根据字符出现频率排序 (C++/Java)

    题目: Given a string, sort it in decreasing order based on the frequency of characters. Example 1: Inp ...

  6. INFINI Labs 产品更新 | Easysearch 1.7.1发布

    INFINI Labs 产品又更新啦~,包括 Console,Gateway,Agent 1.23.0 和 Easysearch 1.7.1.此次版本重点修复历史遗留 Bug .网友们提的一些需求等. ...

  7. .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure

    .NET5 IIS ASP.NET CORE 部署时 HTTP Error 502.5 - ANCM Out-Of-Process Startup Failure 部署机器只安装了dotnet-hos ...

  8. python xlrd excel读取操作

    import xlrd wb = xlrd.open_workbook("test.xlsx") sheet1 = wb.sheets()[1] # 通过索引顺序获取 #table ...

  9. MySQL Docker搭建挂载并启用远程连接

    1.拉取镜像 后面可以指定版本号,这里使用8.0 docker pull docker.io/mysql:8.0 2.查看mysql镜像 docker images 3.启动docker并挂载 doc ...

  10. 颠覆传统编程,用ChatGPT十倍提升生产力

    我们即将见证一个新的时代!这是最好的时代,也是最坏的时代! 需求背景 背景: 平时会编写博客,并且会把这个博客上传到github上,然后自己买一个域名挂到github上. 我平时编写的博客会有一些图片 ...