SpringMVC执行流程

SpringMVC执行流程

SpringMVC常用组件

组件名称来源作用
DispatcherServlet(前端控制器)不需要工程师开发,由框架提供同一处理请求和响应,整个流程控制的中心,由它调用其他组件处理用户的请求。
HandlerMapping(处理器映射器)不需要工程师开发,由框架提供根据请求的url、method等信息查找Handler,即控制器方法。
Handler(处理器)需要工程师开发在DispartcherServlet的控制下Handler对具体的用户请求进行处理。
HandlerAdapter(处理器适配器)不需要工程师开发,由框架提供通过HandlerAdapter对处理器(控制器方法)进行执行。
ViewResolve(视图解析器)不需要工程师开发,由框架提供进行视图解析,得到相应的视图,例如:ThymeleafView、 InternalResourceView、 RedirectView。
View(视图)需要工程师开发将模型数据通过页面展示给用户。

SpringMVC的执行流程

在这里插入图片描述

  1. 🚀用户向服务器发送请求,请求被SpringMVC前端控制器DispatcherServlet捕获

  2. 🚀DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI),判断请求URI对应的映射

    • ①不存在

      ​ a、判断是否配置了mvc:default-servlet-handler
      ​ b、如果没配置,则控制台报映射查找不到,客户端展示404错误。(DispatcherServlet-Completed 404 NOT_FOUND)
      ​ c、如果有配置,则访问目标资源(一般为静态资源, 如:JS,CSS,HTML),找不到客户端也会展示404错误。(DefaultServletHttpRequestHandler DispatcherServlet-Completed 404 NOT_FOUND)

    • ②存在则继续执行后续步骤

  3. 🚀根据该URI,调用HandlerMapping获得Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExceptionChain执行链的形式返回

  4. 🚀DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdapter

  5. 🚀HandlerAdapter经过适配调用具体的处理器(Handler/Controller),此时将开始执行拦截器的preHandler()方法[正向]

  6. 🚀提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)方法,处理请求。在填充Handler入参的过程中,根据配置,Spring会额外的如下工作:

    • ①HttpMessageConveter:将请求信息(如Json, xml等数据)转换成对象,将对象转换为指定的响应信息
    • ②数据转换:对请求消息进行数据转换,如String转换为Integer、Double等
    • ③数据格式化:对请求信息进行数据格式化,如将字符串转换成格式化数字或格式化日期等
    • ④数据验证:验证数据的有效性(长度、格式等),验证结果存储到BingdingResult或Error中
  7. 🚀Handler执行完成后,向DispatcherServet返回一个ModelAndView对象,此时将开始执行拦截器的postHandle()方法[逆向]

  8. 🚀DispatcherServlet将ModelAndView传给ViewReslover(视图解析器)

  9. 🚀ViewReslover解析后返回具体View(视图)

  10. 🚀DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中),渲染视图完毕执行拦截器的afterCompletion()方法[逆向]

  11. 🚀将渲染结果返回给客户端

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/99690.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ChatGPT追祖寻宗:GPT-1论文要点解读

论文地址:《Improving Language Understanding by Generative Pre-Training》 最近一直忙着打比赛,好久没更文了。这两天突然想再回顾一下GPT-1和GPT-2的论文, 于是花时间又整理了一下,也作为一个记录~话不多说,让我们…

下载git

1.官网下载可能会有访问失败 2.用其他的镜像源下载 快 准 狠 CNPM Binaries Mirror

数据结构和算法(1):开始

算法概述 所谓算法,即特定计算模型下,旨在解决特定问题的指令序列 输入 待处理的信息(问题) 输出 经处理的信息(答案) 正确性 的确可以解决指定的问题 确定性 任一算法都可以描述为一个由基本操作组成的序…

layui实现数据列表的复选框回显

layui版本2.8以上 实现效果如图&#xff1a; <input type"hidden" name"id" id"id" value"{:g_val( id,0)}"> <div id"tableDiv"><table class"layui-hide" id"table_list" lay-filter…

聊聊如何玩转spring-boot-admin

前言 1、何为spring-boot-admin&#xff1f; Spring Boot Admin 是一个监控工具&#xff0c;旨在以良好且易于访问的方式可视化 Spring Boot Actuators 提供的信息 快速开始 如何搭建spring-boot-admin-server 1、在服务端项目的POM引入相应的GAV <dependency><grou…

【Unity-Cinemachine相机】虚拟相机旋转Composer属性详解

Look At和Aim本质是控制虚拟相机自身的旋转&#xff0c;并不一定非要看着&#xff0c;或者并不一定非要瞄着这里的游戏对象 Look At和Aim是以Look At里面的对象作为参考来旋转自身 Do nothing&#xff1a;表现出来的行为和Look At空出来一样 Composer&#xff1a;是一个标准的…

【RuoYi移动端】uni-app中通过vuex的store来实现全局变量的修改和读取

一、在store文件中新建csjVar.js文件 const csjVar {csjMess: [{aaa:"ok"},{bbb:"no"}] } export default csjVar 二、修改store文件中新建index.js文件 import Vue from vue import Vuex from vuex import user from /store/modules/user import gette…

浅谈城市轨道交通视频监控与AI视频智能分析解决方案

一、背景分析 地铁作为重要的公共场所交通枢纽&#xff0c;流动性非常高、人员大量聚集&#xff0c;轨道交通需要利用视频监控系统来实现全程、全方位的安全防范&#xff0c;这也是保证地铁行车组织和安全的重要手段。调度员和车站值班员通过系统监管列车运行、客流情况、变电…

Redis-Cluster集群的部署(详细步骤)

一、环境准备 本次实操为三台机器&#xff0c;关闭防火墙和selinux 注:规划架构两种方案&#xff0c;一种是单机多实例&#xff0c;这里我们采用多机器部署 三台机器&#xff0c;每台机器上面两个redis实例&#xff0c;一个master一个slave&#xff0c;第一列做主库&#xff…

蝶形运算法

蝶形运算法是一种基于FFT&#xff08;Fast Fourier Transform&#xff09;算法的计算方法&#xff0c;其基本思想是将长度为N的DFT分解成若干个长度为N/2的DFT计算&#xff0c;并通过不断的合并操作得到最终的结果。该算法也称为“蝴蝶算法”&#xff0c;因为它的计算过程中需要…

回归拟合 | 灰狼算法优化核极限学习机(GWO-KELM)MATLAB实现

这周有粉丝私信想让我出一期GWO-KELM的文章&#xff0c;因此乘着今天休息就更新了(希望不算晚) 作者在前面的文章中介绍了ELM和KELM的原理及其实现&#xff0c;ELM具有训练速度快、复杂度低、克服了传统梯度算法的局部极小、过拟合和学习率的选择不合适等优点&#xff0c;而KEL…

【算法系列篇】分治-归并

文章目录 前言什么是归并算法1. 排序数组1.1 题目要求1.2 做题思路1.3 Java代码实现 2. 数组中逆序对2.1 题目要求2.2 做题思路2.3 Java代码实现 3. 计算右侧小于当前元素的个数3.1 题目要求3.2 做题思路3.3 Java代码实现 4. 翻转对4.1 题目要求4.2 做题思路4.3 Java代码实现 总…