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,我们制作了规格对比表,如下:从规格对…

网页设计中HTML常范的五个错误

1.网页背景色的设置犯错机率:很大普遍性:较广犯错可能性:懒/不知道约2年前我曾发现21cn上出现过一次没有设置背景色的情况,当时我用Email通知了他们,自此之后这个问题我从没犯过。绝大部分人的窗口背景颜色都是白色&am…

mkdir与mkdirs的区别

项目中需要在代码中读取或创建文件保存路径,用到了mkdir,查看还有个mkdirs方法,这里记录一下两者的区别。 1、关于两者的说明如下: boolean mkdir() : 创建此抽象路径名指定的目录。 boolean mkdirs() : 创建此抽象路径名指定…

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

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

网吧修改

Windows Registry Editor Version 5.00 (打开任务管理器) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\System]"DisableTaskMgr"dword:00000000 (恢复桌面右键菜单) [HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Poli…

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&…

Gym 100917J---Judgement(01背包+bitset)

题目链接 http://codeforces.com/gym/100917/problem/J Description standard input/outputStatementsThe jury of Berland regional olympiad in informatics does not trust to contest management systems, so the Berland regional programming contest is judged by the n…

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

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

常用设置

Windows Registry Editor Version 5.00 (加快程序运行速度)[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\FileSystem]"NtfsDisable8dot3NameCreation"dword:00000000"Win31FileSystem"dword:00000000"Win95TruncatedExtensions"dword:…

SpringMVC 源码学习 返回值处理

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

洛谷10月月赛Round.1| P3399 丝绸之路 [DP]

题目背景 张骞于公元前138年曾历尽艰险出使过西域。加强了汉朝与西域各国的友好往来。从那以后&#xff0c;一队队骆驼商队在这漫长的商贸大道上行进&#xff0c;他们越过崇山峻岭&#xff0c;将中国的先进技术带向中亚、西亚和欧洲&#xff0c;将那里的香料、良马传进了我国。…

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"> …

MySQL数据库的优化

MySQL数据库的优化 http://www.vpser.net/opt/vps-mysql-opt.html转载于:https://www.cnblogs.com/carbon3/p/5930868.html

我的博客html

我——龙天宇 <table><tr><td width150 align"right"><DIV style"FILTER: Glow(color#4A7AC9,strength50); WIDTH: 149px; HEIGHT: 119px" aligncenter><br><img height89 width119 src"http://img.blog.163.com/p…

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

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

html简单样式

1.外部样式表 link rel"stylesheet" type"text/css" href"bbb.css"> 2.内部样式表 <style type"text/css"> p{ color: bisque; }</style> 3.内联样式表 <a style"color: blueviolet">hhh…

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

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

前端学习(2146):vue中TypeError: this.getResolve is not a function

可能是加载顺序的问题 const path require(path) module.exports {entry: ./src/main.js,output: {path: path.resolve(__dirname, dist),filename: bund.js},module: {rules: [{test: /\.css$/,use: [style-loader, style-loader]}]} }