02【SpringMVC的工作流程】

news/2024/5/2 20:04:23/文章来源:https://blog.csdn.net/Bb15070047748/article/details/128105153

文章目录

  • 二、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.luyixian.cn/news_show_228552.aspx

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

相关文章

Apifox很难不爱

一、背景 项目开发我们都知道在一个项目团队中是由很多角色组成,最常见团队的就是前端开发工程师、客户端开发工程师、服务端开发工程师组成一个团队,团队之间进行合作,一般我们都离不开API接口管理和测试,API接口管理可以理解为前…

高等数学基础概念的Python开发实现

一般的数学算式math函数库就可以解决了,如果是涉及到高等数学极限,微积分等知识,就需要用到sympy科学计算库,它是专门用来解决数学的运算问题的。 Sympy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统&…

基于非支配排序遗传算法的多目标水光互补优化调度附Matlab代码

✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法 …

产品经理必备的能力有哪些?

从一名普通的产品经理到一名优秀的产品经理要经历什么?哪些又是产品经理必备的能力?产品经理对能力的需求也不尽相同,在不同的团队合作模式下,还必须懂得各种能力。 一、业务分析能力 数据分析能力该是什么样的呢 1、有数据意识…

SCP命令在不同远程服务器之间发送文件(指定端口)

最近想把数据集放在另一个服务器上,但是如果先下载到本地然后再上传过去,则需要浪费好久时间。 特总结下如何快捷的通过命令完成不同远程服务器之间的文件传输,以及遇到的问题。 SCP命令 Linux scp 命令用于 Linux 之间复制文件和目录。1 s…

JavaCV音视频开发宝典:rtsp转推到rtp(非TS流方式),及使用TS流发送解决sdp缺失问题

《JavaCV音视频开发宝典》专栏目录导航 《JavaCV音视频开发宝典》专栏介绍和目录 前言 在之前的文章中,由于忘记介绍使用的rtp推流方式都是TS流方式,RTP方式推流没讲,本章作为之前文章(JavaCV音视频开发宝典:rtsp拉流并使用转码方式转推到rtp)的补充。 注意:本文不需要…

Java+JSP+MySQL基于SSM的在线投票系统-计算机毕业设计

项目介绍 随着社会的发展,人们在处理一些问题的时候不同意见越来越多,这源于人们对思想的解放和对社会的认识。所以在处理同一问题上,为了征求不同人的意见在线投票系统诞生了。 基于SSM的在线投票系统以钦州学院为背景,运用在校…

论文投稿指南——中文核心期刊推荐(计算机技术)

>>>深度学习Tricks&#xff0c;第一时间送达<<< &#x1f680; 写在前面 &#x1f431;‍&#x1f3cd; 本期开始&#xff0c;小海带会定期推荐各专业领域的中文核心期刊及论文投稿网址&#xff0c;供大家参考交流 ~ 《中文核心期刊要目总览》是学术界对某…

微信开发者工具 / 反编译工具CrackMinApp 下载安装

微信开发者工具 / 反编译工具CrackMinApp 下载安装 文章目录微信开发者工具 / 反编译工具CrackMinApp 下载安装前言一、微信开发者工具下载安装二、反编译工具CrackMinApp安装三、导入反编译后的文件四、友情提示总结前言 微信开发者工具介绍&#xff1a;微信提供的微信小程序…

一篇个人陈述应该包括这三个内容

大家好呀&#xff0c;申请季正如火如荼地进行着&#xff0c;不知道大家都忙碌得怎么样了呢&#xff1f;今天我们来聊聊个人陈述Personal statement,的撰写&#xff0c;包括一篇个人陈述应该包括哪些部分。 申请时&#xff0c;除了学习成绩等“硬背景”&#xff0c;个人陈述(PS…

[SpringMVC]第三篇:作用域传参

四大域: PageContext对象(不常用) 作用域范围:当前jsp页面内有效 request对象(经常用) 作用域范围:一次请求内。 作用: 解决了一次请求内的资源的数据共享问题 session对象(登录,会话时会用) 作用域范围:一次会话内有效。 说明:浏览器不关闭,并且后台的session不失效&#xff…

内容、文档和流程数字化如何支持精益原则

内容、文档和流程数字化如何支持精益原则 无论您身处哪个行业&#xff0c;想要在业务中取得真正的成功就必须把客户放在所有决策的中心位置&#xff0c;以便您能够给客户提供最佳服务。同时公司以最高效的方式向前发展也很重要。幸运的是&#xff0c;有一种方法可以确保两者兼而…

Java企业微信对接

最近项目中要对接企业微信&#xff0c;实现通讯录数据同步&#xff0c;即在企业端添加编辑删除用户&#xff0c;部门数据要同步到微信端&#xff0c;同时微信端添加编辑删除用户&#xff0c;部门数据要同步到企业端&#xff0c;实现数据同步功能&#xff0c;需要调用企业微信AP…

五款朴实无华却又能极大提升办公效率的软件

最近后台收到好多小伙伴的私信&#xff0c;今天继续推荐五款小工具&#xff0c;都是免费使用的&#xff0c;大家可以去试试看。 1.光追动画制作——Luxion KeyShot Luxion KeyShot是一款互动性的光线追踪与全域光渲染3D渲染与动画制作软件&#xff0c;内置丰富多样的材质&…

mybatis实战:三、mybatis多表查询的映射

依照上一期的继续 1.UserMapper.xml 除了直接对应基本数据类类型、表的实体类&#xff0c;还可能用到多表查询。 <select id"selectRolesByUserId" resultType"tk.mybatis.simple.model.SysRole">select r.id, r.role_name roleName, r.enabled, r…

Typora导出Word

1.Typora导出Word配置 1.访问GitHub&#xff1a; https://github.com/jgm/pandoc/releases/tag/2.11.3.2https://github.com/jgm/pandoc/releases/tag/2.11.3.2 2.下载对应的文件 3.到本地安装Typora目录下解压 4.配置环境变量 我的电脑–属性–高级系统设置–高级–环境变量…

Linux零基础入门(二)Linux基础命令

Linux零基础入门&#xff08;二&#xff09;Linux基础命令前言Linux基础命令一 Linux的目录结构1 Linux路径的描述方式二 Linux命令入门1 Linux命令基础格式2 ls命令3 HOME目录和工作目录4 ls命令的参数ls 命令的 -a选项ls命令的 -l选项ls命令选项的组合使用ls选项和参数的组合…

搭建Docker+SRS服务器实现推流拉流的效果

最初的一个想法&#xff0c;是针对当前的网络电视去的&#xff0c;很多网络电视买回家&#xff0c;还要充很多会员&#xff0c;甚至跌入连环坑。我想给妈妈买一台电视&#xff0c;想把我自己收集的电影电视剧做成一个影视库&#xff0c;通过搭建家庭影院服务器&#xff0c;然后…

Fiddler抓包工具是最强大最好用的 Web 调试工具之一

Fiddler是最强大最好用的Web调试工具之一&#xff0c;它能记录所有客户端和服务器的http和https请求&#xff0c;允许你监视&#xff0c;设置断点&#xff0c;甚至修改输入输出数据. 使用Fiddler无论对开发还是测试来说&#xff0c;都有很大的帮助。 目录 Fiddler的基本介绍 …

Java+JSP+MySQL基于SSM的医院挂号就诊系统-计算机毕业设计

项目介绍 随着计算机科技的快速发展&#xff0c;很多地方都实现了自动化管理&#xff0c;医院也不例外。在大多数医院&#xff0c;无论是挂号处&#xff0c;还是取药的窗口&#xff0c;都会看到有很长的队伍&#xff0c;很显然这样会让患者就医的过程中浪费太多的时间。其次&a…