springMVC 源码学习-请求映射原理

一、DispatcherServlet的继承关系

1、FrameworkServlet

        HttpServlet中的doGet等方法在FrameworkServlet之中重写了,都是调用该方法:

         在这个方法内部调用doServlce的方法

         这个doService的方法在FrameworkServlet中是一个抽象方法,说明是交给它的子类去重写的即就是DispatcherServlet。

2、DispathcerServlet

        这也是SpringMVC的核心组件,用来处理请求,重写(实现了)doService方法。

         在doService方法中,最核心的是调用doDispatch来做转发等操作。

2.1 doDispatch

        随便写了个控制器测试 :

        

        当发送/car请求时候,在doDispatch中获取到请求

        在request变量中就有请求路径。

 

        之后执行到这一步:

        在这一步执行完之后就找到了所对应的控制器及上面的 Car()  方法。

2.2 mappedHandler的确定

        this.getHandler方法:

   @Nullableprotected HandlerExecutionChain getHandler(HttpServletRequest request) throws Exception {if (this.handlerMappings != null) {Iterator var2 = this.handlerMappings.iterator();while(var2.hasNext()) {HandlerMapping mapping = (HandlerMapping)var2.next();HandlerExecutionChain handler = mapping.getHandler(request);if (handler != null) {return handler;}}}

        其中handlerMappings初始就有5个:

        主要的目的就是 在这五种类型的处理器选取能够匹配当前请求的handler。

        spring中的web项目启动的过程中MVC就会扫描所有的Controller并且解析其中的注解,全部保存到handlerMappings中。

        

         执行完这行代码后可以在 mapping变量中的看到:

         说明标注注解@RequestMapping的方法都已经被注册了。

        之后SpringMVC经过对比找到了请求路径为/car的控制器及其方法,之后返回handler即可。

HandlerExecutionChain handler = mapping.getHandler(request);

        确定handler的过程:首先是匹配url,比如有好几个/car的请求路径但是方法不同。

        然后再一个一个确认请求方法,最终返回所对应的handler。也就是mapping,getHandler中的方法。

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

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

相关文章

constraintlayout布局新特性_AMD发布Ryzen PRO 4000系列移动处理器:多了超线程和商用安全特性...

昨日晚间,AMD正式发布了基于Renoir的最新一代商用移动处理器Ryzen PRO 4000系列,本次共发布3款处理器,分别是Ryzen 7 PRO 4750U、Ryzen 5 PRO 4650U和Ryzen 3 PRO 4450U,我们制作了规格对比表,如下:从规格对…

易支付系统源码_刷脸支付系统源码,插件源码合作模式有哪些,采购源码需要注意什么...

对刷脸支付比较关注的朋友,应该都知道源码。当拥有这个,就意味着有了独立的系统。也意味着可以打造自己的品牌,转化自己资源,获取更多的利润。但是想拥有一套源码也是不简单的,不仅因为编写的难度和价格,也…

SpringMVC源码-不同类型的参数解析

随便写一个demo: RequestMapping("/car/{id}")public Map<String, Object> getCar(PathVariable("id") Integer id,RequestParam("type") String type,RequestParam("hobby") List<String> hobby){Map<String, Object&…

raid5 合适 多少块硬盘_raid1 raid2 raid5 raid6 raid10如何选择使用?各需要几块硬盘?...

我们在做监控项目存储时&#xff0c;经常会用到磁盘阵列&#xff0c;什么是磁盘阵列呢&#xff1f;那为什么要做磁盘阵列呢&#xff1f;raid1 raid2 raid5 raid6 raid10各有什么优势&#xff1f;本期我们来看下。一、什么是Raid&#xff1f;它有什么作用&#xff1f;1、什么是R…

SpringMVC 源码学习 返回值处理

SpringMVC中对返回值的数据基本分为两类&#xff1a; 1、响应数据 2、响应页面 一、响应数据 响应数据大多数都是将返回值的格式转换为JSON格式然后展示在页面或者保存i起来。 第一步&#xff1a;在SpringBoot中需要引入json场景 <dependency><groupId>org.sprin…

body div js 放大图片_jquery图片放大插件鼠标悬停图片放大效果

都知道jquery都插件是非常强大的&#xff0c;最近分享点jquery插件效果&#xff0c;方便效果开发使用。一、HTML代码<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> …

预览docx_Windows-快速预览文件-QuickLook

开源、免费的文件快速预览工具&#xff0c; 支持图片、文档、音视频、代码文本、压缩包等多种格式。获得 Mac OS 空格键快速预览文件相同的体验效果图文件夹音视频 浏览压缩包&#xff0c;文本支持的格式&#xff1a;图片&#xff1a;.png, .jpg, .bmp, .gif, .psd, .apng&…

json 微信小程序 筛选_微信小程序学习记录

全局配置app.json 文件用来对微信小程序进行全局配置。pages 类型为 String Array 是 页​面路径列表&#xff0c;创建目录和更改时会自动更改文件。用于指定小程序由哪些页面组成&#xff0c;每一项都对应一个页面的 路径文件名 信息。window 用于设置小程序的状态栏、导航条、…

一定质量的封闭气体被压缩后_多晶硅氯氢化装置补充氢隔膜压缩机十字头铜套磨损原因分析与改善探讨...

潘祝新&#xff0c;王永(江苏中能硅业科技发展有限公司&#xff0c;江苏徐州221004)[摘要]&#xff1a;补充氢气压缩机是多晶硅行业氯氢化装置中的关键设备&#xff0c;它为生产系统的稳定运行不断的补充高纯氢气&#xff0c;其稳定而高效的运行对于生产系统的稳定性及提高氯硅…

vue 生成发布包_年轻人如何从0到1封装发布一个vue组件__Vue.js

封装发布组件是前端开发中非常重要的能力&#xff0c;通过对常用组件的封装可以提升团队开发的效率&#xff0c;避免重复劳作且不方便维护。好的组件的抽象和封装能让组件得到更广泛和多环境兼容的应用。本文讲述了如何一步步从0到1封装发布一个常用的toast组件的过程。本文是搭…

实现拓扑图_20源码实现【自动寻路】 —【拓扑图】—网游城市互传最优路径算....

金猪脚本(原飞猪脚本)以按键精灵教学为主,涉及UiBot&#xff0c;Python,Lua等脚本编程语言,教学包括全自动办公脚本,游戏辅助脚本,引流脚本,网页脚本,安卓脚本,IOS脚本,注册脚本,点赞脚本,阅读脚本以及网赚脚本等各个领域。想学习按键精灵的朋友可以添加金猪脚本粉丝交流群:554…

Windows快捷键大全

天气:心情:Windows快捷键大全 一、常见用法&#xff1a; F1 显示当前程序或者windows的帮助内容。 F2 当你选中一个文件的话&#xff0c;这意味着“重命名” F3 当你在桌面上的时候是打开“查找&#xff1a;所有文件” 对话框 F10或ALT 激活当前程序的菜单栏 windows键或CTRLES…