02【SpringMVC的工作流程】

news2024/11/24 23:07:15

文章目录

  • 二、SpringMVC的工作流程
    • 2.1 SpringMVC的三大组件
      • 2.1.1 HandlerMapping:
      • 2.1.2 HandlerAdapter:
      • 2.1.3 ViewResolver:
    • 2.2 SpringMVC源码分析
      • 2.2.1 准备工作
      • 2.2.2 查看DispatcherServlet的继承体系:
      • 2.2.3 通过映射器获取执行链:
        • 1)查看HandlerMapping接口:
        • 2)寻找HandlerMapping实现类:
      • 2.2.4 获取执行handler的适配器
      • 2.2.5 适配器执行handler
      • 2.2.6 解析视图并渲染
      • 2.2.7 View组件渲染

二、SpringMVC的工作流程

2.1 SpringMVC的三大组件

2.1.1 HandlerMapping:

主要功能:根据前端发送的请求来映射(通过反射)到具体的Handler(方法/类)上,用于找到handler

2.1.2 HandlerAdapter:

主要功能:使用不同的适配器来执行handler,返回ModelAndView(模型和视图对象);

2.1.3 ViewResolver:

主要功能:解析模型和视图进行数据的渲染;

在这里插入图片描述

1、客户端发送请求给前端控制器(DispatcherServlet)

2、dispatcherServlet接收到请求调用HandlerMapping处理器映射器

3、处理器映射器根据请求的url找对应的处理器,找到并生成处理器对象(handler)返回

4、dispatchServlet将handler传入处理器适配器,使用合适的适配器执行

5、处理器适配器执行handler

6、执行完成最终封装一个ModelAndView(模型和视图)

7、将ModelAndView返回给前端控制器

8、前端控制器将请求的路径交给视图解析器进行解析

9、视图解析器解析完毕后封装一个View对象给dispatcherServlet,此View对象封装了响应参数

10、View对象对其进行渲染

11、响应客户端

重点记住:

1)映射器来找到处理器(执行的方法)

2)适配器执行handler,返回ModelAndView

3)视图解析器解析ModelAndView,返回View

4)view对其进行渲染

2.2 SpringMVC源码分析

SpringMVC实质上是对servlet进行封装,让我们的开发更加简便

2.2.1 准备工作

我们可以在spring-webmvc-x.x.x.RELEASE.jar源码包下查看DispatcherServlet.properties文件看有哪些处理器是springmvc默认加载的

在这里插入图片描述

在这里插入图片描述

2.2.2 查看DispatcherServlet的继承体系:

在这里插入图片描述

我们发现DispatcherServlet最终还是继承与HttpServlet,那么我们就直接找service方法吧!

在这里插入图片描述

经打断点分析发现,最终会走向DispacherServlet的doDispacher方法!

在这里插入图片描述

此时请求进入DispatcherServlet,按照我们画图分析的结果应该是把请求交给处理器映射器HandlerMapping最终返回一个Handler:

在这里插入图片描述

2.2.3 通过映射器获取执行链:

我们再点击getHandler方法查看源码,发现最终是交给了映射器(HandlerMapping)来获取到执行链(对Handler的封装)

在这里插入图片描述

1)查看HandlerMapping接口:

在这里插入图片描述

2)寻找HandlerMapping实现类:

在这里插入图片描述

2.2.4 获取执行handler的适配器

在这里插入图片描述

在SpringMVC默认创建的众多适配器中选择合适的;

在这里插入图片描述

  • 查看HandlerAdpter接口:

在这里插入图片描述

2.2.5 适配器执行handler

在这里插入图片描述

2.2.6 解析视图并渲染

在这里插入图片描述

DispatcherServlet对结果集进行渲染

如何渲染?

我们刚刚分析得知,应该需要视图解析器(ViewResolver来解析成一个View)

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

查看ViewResolver接口:

在这里插入图片描述

2.2.7 View组件渲染

在这里插入图片描述

查看View接口:

在这里插入图片描述

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

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

相关文章

工业机械设备设计与艺术设计

众所周知,外观设计是目前工业设计的一种,也是展示产品外观性能的最佳途径。如果外观设计做得好,产品可以在第一时间吸引顾客。说到外观设计,我们不得不说,工业机械的外观设计,因为机械工业是工业设计的主要…

Java客户关系系统(含源码+论文+答辩PPT等)

该项目采用技术Struts2代理注解反射MyBatisjqueryjscss等技术,项目含有源码、文档、配套开发软件、软件安装教程、项目发布教程等 项目功能介绍: 系统管理:用户登录、用户退出 员工管理:主要实现对员工的增、删、查、改功能 客户信…

ZMQ之面向服务的可靠队列(管家模式)

管家模式协议(MDP)在扩展PPP协议时引入了一个有趣的特性:client发送的每一个请求都有一个“服务名称”,而worker在像队列装置注册时需要告知自己的服务类型。MDP的优势在于它来源于现实编程,协议简单,且容易…

孩子到底是食物过敏?还是食物不耐受?

虾蟹过敏,牛奶过敏,鸡蛋过敏,甚至花生过敏……近年来,儿童食物过敏的发病率逐年上升。食物过敏对儿童危害很大,其临床症状会使儿童患病,影响身心健康;长期禁食,影响均衡营养摄入&…

Segger RTT深度使用说明-移植-Jlink rtt viewer显示-输出到Secure CRT

简介 RTT( Real Time Terminal)是SEGGER公司新出的可以在嵌入式应用中与用户进行交互的实时终端。J-Link驱动4.90之后的版本都支持RTT。RTT既可以从MCU上输出信息、也可以向应用程序发送信息,由于其高速的特性,所以不影响MCU的实…

重磅消息:Lazada和Shopee通过中国执照就可以开通本地店铺,享受更多的流量和资源扶持

目前Lazada平台是可以做跨境店和本地店铺的,跨境店铺指的是中国卖家通过国内的营业执照开店,本地店指的是东南亚本地的商家提供个人身份证或当地的营业执照开的店铺,那么有什么区别和优劣势 1.跨境店/本地店开店所需资料 跨境店&#xff1a…

横向的Excel输出为pdf自动分成两页怎么办?不分页,铺满整张纸的方法来了

我们工作中有时候会需要把Excel转换成pdf,一般我们用WPS的“输出为pdf”功能就可以转了。但是有些横向的Excel转换的时候,会自动分成两页,这并不是我们想要的效果。怎么才能不分成两页呢? 首先我们有一个Excel: 使用…

什么牌子蓝牙耳机通话质量好?通话质量好的蓝牙耳机推荐

蓝牙耳机作为手机的最佳伴侣,已经成为老百姓日常生活必备。每次有大品牌发布新款蓝牙耳机,几乎都能够得到很好的反响,蓝牙耳机不仅在音质上有了很大的提升,并且在其他功能也在不断的提升,使用蓝牙耳机通话避免不了电话…

m基于matlab的光通信误码率仿真,分别对比了OFDM+BPSK和OFDM+4QAM的误码率和星座图

目录 1.算法描述 2.matlab算法仿真效果 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 光通信系统中,QAM调制应用广泛,因为其利用幅度和相位同时传递i信息,提高了频带利用率。目前,最高阶数的QAM已达到1024-QAM即星座图有1024个点…

网站风格变黑白的方法,用css或javascript方法将网站改为灰色

如何把网站颜色去掉?用下面的方法即可 1.通用方法 body { -webkit-filter: grayscale(100%);-moz-filter: grayscale(100%);-ms-filter: grayscale(100%);-o-filter: grayscale(100%);filter: grayscale(100%);filter: gray; }html {-webkit-filter: grayscale(10…

harbor私有仓库部署

一、Harbor的概念 Harbor是VMware公司开源的企业级Docker Registry项目,其目标是帮助用户迅速搭建一个企业级的Docker Registry服务 Harbor以 Docker 公司开源的Registry 为基础,提供了图形管理UI、基于角色的访问控制(Role Based AccessControl)、AD/LD…

python习题004--使用python实现ATM机效果

相信每一个人在日常生活中使用ATM机的次数不少,尤其是现在微信支付,支付宝支付的普及,就需要用到ATM机并将现金存入银行卡内。 接下来我就使用python并结合面向对象的知识编写一个简易的ATM机存取款的效果【仅供参考】。 题目 简易的ATM机…

K8S-1.18.20高可用集群之部署集群监控系统kube-prometheus插件

K8S-1.18.20高可用集群之部署集群插件-KUBE-PROMETHEUS插件 一、简介 kube-prometheus 是一整套监控解决方案,它使用 Prometheus 采集集群指标,Grafana 做展示,包含如下组件: The Prometheus Operator Highly available Promet…

某车app登录参数分析

目标app: Y29tLmNoZTE2OC51Y2RlYWxlcg== 抓取登录包如下: 提交的data参数: _appid (app标识,固定值) _sign(加密) appversion(app版本,固定值) channelid(固定值) pass (密码加密) udid (加密) user (手机号) 共有_sign、 pass、udid三处加密, 其中_sign预估md5加密, pa…

XShell与XFtp的安装及简单使用

目录 XShell的安装 XFtp的安装 测试XShell和XFtp XShell的安装 1、完成解压后如下,所示 2、双击exe文件进行安装 3、选中免费为家庭/学校 (因为XShell的商业版和免费版功能是一样的,区别在于可以开启的窗口数量的不同) 4、勾选 …

RK3588移植-ffmpeg交叉编译

文章目录1.下载ffmpeg2.交叉编译3.修改cmakelist.txt4.将lib文件复制到install目录下的lib目录5.测试文件6.运行测试样例7.错误n.测试文件源码1.下载ffmpeg git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg 2.交叉编译 进入下载目录,将ffmpeg编译成arm64平台…

【菜菜的sklearn课堂笔记】聚类算法Kmeans-重要参数n_clusters

视频作者:菜菜TsaiTsai 链接:【技术干货】菜菜的机器学习sklearn【全85集】Python进阶_哔哩哔哩_bilibili n_clusters是KMeans中的k,表示着我们告诉模型我们要分几类。这是KMeans当中唯一一个必填的参数,默认为8类,但通…

glxy_阿里云存储

阿里云OSS储存 讲师的添加实现:oss服务 访问并登陆阿里云,,实名认证 产品分类---->对象储存OSS 开通OSS 进入管理控制台 使用OSS前先创建bucket java 代码实现 准备工作:创建操作阿里云oss许可证(阿里云颁发…

1545_AURIX_TC275_CPU子系统_存储以及性能

全部学习汇总: GreyZhang/g_TC275: happy hacking for TC275! (github.com) 章节的标题不是我写的标题,但是从功能分类看的话基本是,暂且如此总结。 1. DSYNC的命令之前看过,因为cache是具有不可见性的,通过这个命令可…

mysql分区表的增删改查操作

mysql分区表的增删改查操作一、mysql创建表分区二、基本分区信息查询2.1 查看mysql版本是否支持分区2.2 查看表是否为分区表2.2.1 查询表分区信息2.2.2 查看表的所有分区三、分区表的查询操作四、分区表的增删改操作4.1 新增分区4.1.1 给已有的表加上分区4.1.2 新增分区4.2 重新…