SpringMVC的执行流程

news2024/11/15 1:49:08

文章目录

  • 1 初始化阶段
  • 2 匹配阶段
  • 3 执行阶段

我们把整个流程分成三个阶段

  • 初始化阶段
  • 匹配阶段
  • 执行阶段

1 初始化阶段

  • 在 Web 容器第一次用到 DispatcherServlet 的时候,会创建其对象并执行 init 方法

  • init 方法内会创建 Spring Web 容器,并调用容器 refresh 方法

  • refresh 过程中会创建并初始化 SpringMVC 中的重要组件, 例如 MultipartResolver,HandlerMapping,HandlerAdapter,HandlerExceptionResolver、ViewResolver 等

  • 容器初始化后,会将上一步初始化好的重要组件,赋值给 DispatcherServlet 的成员变量,留待后用

在这里插入图片描述

2 匹配阶段

  • 用户发送的请求统一到达前端控制器 DispatcherServlet

  • DispatcherServlet 遍历所有 HandlerMapping ,找到与路径匹配的处理器

    • ① HandlerMapping 有多个,每个 HandlerMapping 会返回不同的处理器对象,谁先匹配,返回谁的处理器。其中能识别 @RequestMapping 的优先级最高

    • ② 对应 @RequestMapping 的处理器是 HandlerMethod,它包含了控制器对象和控制器方法信息

    • ③ 其中路径与处理器的映射关系在 HandlerMapping 初始化时就会建立好
      在这里插入图片描述

  • 将 HandlerMethod 连同匹配到的拦截器,生成调用链对象 HandlerExecutionChain 返回
    在这里插入图片描述

  • 遍历HandlerAdapter 处理器适配器,找到能处理 HandlerMethod 的适配器对象,开始调用
    在这里插入图片描述

3 执行阶段

  • 执行拦截器 preHandle
    在这里插入图片描述

  • 由 HandlerAdapter 调用 HandlerMethod

    • ① 调用前处理不同类型的参数
    • ② 调用后处理不同类型的返回值
      在这里插入图片描述
  • 第 2 步没有异常

    • ① 返回 ModelAndView
    • ② 执行拦截器 postHandle 方法
    • ③ 解析视图,得到 View 对象,进行视图渲染
      在这里插入图片描述
  • 第 2 步有异常,进入 HandlerExceptionResolver 异常处理流程
    在这里插入图片描述

  • 最后都会执行拦截器的 afterCompletion 方法

  • 如果控制器方法标注了 @ResponseBody 注解,则在第 2 步,就会生成 json 结果,并标记 ModelAndView 已处理,这样就不会执行第 3 步的视图渲染

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

阿里十年技术沉淀|深度解析百PB级数据总线技术

云原生场景下数据总线需求场景及挑战 数据总线简介 数据总线作为大数据架构下的流量中枢,在不同的大数据组件之间承载着数据桥梁的作用。通过数据总线,可以实时接入来自服务器、K8s、APP、Web、IoT/移动端等产生的各类异构数据,进行统一数据…

【java 新特性】java8新特性

核心内容 lambda 函数编程 在Java世界里面,面向对象还是主流思想,对于习惯了面向对象编程的开发者来说,抽象的概念并不陌生。面向对象编程是对数据进行抽象,而函数式编程是对行为进行抽象。现实世界中,数据和行为并…

【机器学习实战】使用SGD、随机森林对MNIST数据集实现多分类(jupyterbook)

1. 获取数据集并重新划分数据集 # 获取MNIST数据集 from sklearn.datasets import fetch_openml mnist fetch_openml(mnist_784, version1, cacheTrue, as_frameFalse)# 查看测试器和标签 X, y mnist[data], mnist[target] X_train, X_test, y_train, y_test X[:60000], X[…

Nuxt3使用echart,使用中国地图

目录 第一步安装echart 第二步配置plugins 第三步使用 例如使用饼状图 例如使用中国地图 第一步安装echart npm install echarts --save 第二步配置plugins 在plugins创建echarts.ts文件并写入下面内容 import * as echarts from echartsexport default defineNuxtPlugin((…

springboot事件监听机制二:基本工作原理

前言 这是继《springboot事件监听机制一:实战应用》第二篇,知其然,当然还要知其所以然,深入的源码里面探寻一下这一有套机制的工作原理。spring生态很茂盛,这里不会站太高去分析这个问题,大扯spring的一些原…

优秀的项目跟踪管理软件有哪些?

国内外优秀的项目跟踪管理软件有:1、软件项目跟踪管理PingCode;2、通用项目跟踪管理Worktile;3、小型团队项目跟踪管理Asana;4、基于桌面的项目跟踪软件Microsoft Project;5、适用所有类型项目的跟踪软件Clickup&#…

[ vulhub漏洞复现篇 ] GhostScript 沙箱绕过(任意命令执行)漏洞CVE-2018-16509

🍬 博主介绍 👨‍🎓 博主介绍:大家好,我是 _PowerShell ,很高兴认识大家~ ✨主攻领域:【渗透领域】【数据通信】 【通讯安全】 【web安全】【面试分析】 🎉点赞➕评论➕收藏 养成习…

Cellobiose-PEG-DBCO 纤维二糖-聚乙二醇-二苯基环辛炔,DBCO-PEG-纤维二糖

Cellobiose-PEG-DBCO 纤维二糖-聚乙二醇-二苯基环辛炔,DBCO-PEG-纤维二糖 中文名称:纤维二糖-二苯基环辛炔 英文名称:Cellobiose-DBCO 别称:二苯基环辛炔修饰纤维二糖,二苯基环辛炔-纤维二糖 PEG分子量可选&…

2023年湖北安全员ABC报名时间和考试时间是什么时候?甘建二

2023年湖北安全员ABC报名时间和考试时间是什么时候? 安全员ABC考试和报名时间,12月份安全员ABC考试时间是12月底,12月份湖北安全员ABC报名是现在开始报名了,目前报名入口已经开通需要开始报名了。 2023年湖北安全员ABC报名时间&am…

人工智能历史上的重要一步:ChatGPT影响到谷歌地位?

AI神器ChatGPT 火了。 能直接生成代码、会自动修复bug、在线问诊、模仿莎士比亚风格写作……各种话题都能hold住,它就是OpenAI刚刚推出的——ChatGPT。 有脑洞大开的网友甚至用它来设计游戏:先用ChatGPT生成游戏设定,再用Midjourney出图&…

如何让 useEffect 支持 async/await?

大家在使用 useEffect 的时候,假如回调函数中使用 async...await... 的时候,会报错如下。 看报错,我们知道 effect function 应该返回一个销毁函数(return返回的 cleanup 函数),如果 useEffect 第一个参数传…

[毕业设计]C++程序类内聚度的计算与存储

目录 前言 课题背景和意义 实现技术思路 实现效果图样例 前言 📅大四是整个大学期间最忙碌的时光,一边要忙着备考或实习为毕业后面临的就业升学做准备,一边要为毕业设计耗费大量精力。近几年各个学校要求的毕设项目越来越难,有不少课题是研究生级别难度的,对本科…

651页23万字智慧教育大数据信息化顶层设计及智慧应用建设方案

目录 一、 方案背景 1.1 以教育现代化支撑国家现代化 1.2 教育信息化是教育现代化重要内容和标志 1.3 大数据驱动教育信息化发展 1.4 政策指导大数据推动教育变革 1.5 教育大数据应用生态服务教育现代化 二、 建设需求 2.1 地区教育系统亟待进行信息共享、系统融合 2.2…

L2正则线性回归(岭回归)

岭回归 数据的特征比样本点还多,非满秩矩阵在求逆时会出现问题 岭回归即我们所说的L2正则线性回归,在一般的线性回归最小化均方误差的基础上增加了一个参数w的L2范数的罚项,从而最小化罚项残差平方和 简单说来,岭回归就是在普通…

FreeRTOS基础知识

目录 1.任务调度器简介 1.1抢占式调度举例 1.2时间片调度举例 2.任务状态 3.总结 1.任务调度器简介 调度器就是使用相关的调度算法来决定当前需要执行哪个任务。 FreeRTOS一共支持以下三种任务调度方式: FreeRTOS调度方式抢占式调度主要是针对优先级不同的任务…

vector深度剖析及模拟实现

vector模拟实现🏞️1. vector的扩容机制🌁2. vector迭代器失效问题📖2.1 insert导致的失效📖2.2 erase导致的失效🌿3. vector拷贝问题🏜️4. 模拟实现vector🏞️1. vector的扩容机制 #include&…

SQL快速入门、查询(SqlServer)[郝斌SqlServer完整版]

文章目录SQL学前导图一 、基本信息1 相关名词数据库相关基本概念:字段、属性、记录(元祖)、表、主键、外键2 基本语句3 约束:主键约束、外键约束、check约束、default约束、唯一约束二、查询1 计算列2 distinct(去重)3 between4 i…

生产跟踪是生产控制的基础,其主要功能有哪些?

生产跟踪是生产控制的基础,只有对生产的过程全面了解,才能掌握和控制生产的执行情况,所以生产跟踪模块在制造执行系统中一种起着举足轻重的作用。生产跟踪,不单单是对生产过程进行监控和记录数据,还需要将各个生产环节…

2023最新SSM计算机毕业设计选题大全(附源码+LW)之java校园新闻发布管理系统574ec

面对老师五花八门的设计要求,首先自己要明确好自己的题目方向,并且与老师多多沟通,用什么编程语言,使用到什么数据库,确定好了,在开始着手毕业设计。 1:选择课题的第一选择就是尽量选择指导老师…

ubuntu18.04上点云PCL 库使用初探

PCL 库使用资料 在 ubuntu18.04 上使用pcl记录 一、 安装 首先需要在 ubuntu 上安装c 库 sudo apt install libpcl-dev dpkg -S pcl 查看包文件安装的位置,包括头文件和库文件,进到库文件路径下看,目前安装的是 pcl 1.8.1 /usr/include/pc…