当前位置: 首页 > news >正文

springboot请求映射原理,springboot版本2.3.4.RELEASE

一,springboot接收的所有的请求都会来到DispatchServlet

因为springboot底层使用的还是springmvc的DispatchServlet。
在这里插入图片描述
然后先进入doDispatch 方法 :
在这里插入图片描述

这个类查看其父类是HttpServlet,所以这个也是一个HttpServlet。
idea 中选中类名,按ctrl + h ,可以打开下面的继承树,可以看到其父类是HttpServlet。
在这里插入图片描述

二,既然是HttpServlet,必然会重写相应的doGet和doPost等的方法。

只能在 FrameworkServlet 中找到对应的doGet和doPost等。
在这里插入图片描述
又调用的processRequest 方法。这个方法又主要调用的doService 方法。
在这里插入图片描述
doServic是一个抽象方法,只能去子类查看。
在这里插入图片描述
在子类中找到doService 方法,核心部分的代码是doDispatch
在这里插入图片描述

三,所以这个SpringMvc的主要功能都从这个DispatcherServlet 类下的doDispatch 方法寻找。

最主要的部分功能是getHandler的功能来处理决定相应的handler 来处理当前的请求。
从下面这个getHandler 方法获得。
在这里插入图片描述
进入方法查看。
在这里插入图片描述
有一个handlerMappings 的属性列表。这里面存储了所有处理器映射规则,也就是访问请求的路径,找哪个方法都会在这里面进行匹配。这个handlerMappings 的list集合,会存储5个元素的HandlerMapping。如下:
在这里插入图片描述

第一个元素是RequestHandlerMapping,会在springboot启动时,扫描所有的controller,将保存@RequestMapping信息和 handler的映射规则,保存到这个HandlerMapping中。
所有自定义的映射方法都在这个对象的registry 属性下:
在这里插入图片描述
第五个元素是WelcomPageHandlerMapping,处理根路径请求。
然后根据代码进行遍历所有的handlerMappings的mapping,哪个能处理当前的请求,则由哪个HandlerMapping来进行处理。
在这里插入图片描述

相关文章:

  • 【数值分析+python】python生成稀疏对称正定矩阵
  • jave web开发(IDEA中配置maven)
  • 保存滚动位置的实现方法
  • 什么是数据库事务
  • 异步FIFO的原理及verilog实现(循环队列、读写域数据同步、Gray Code、空满标志、读写域元素计数)
  • 大数据_YARN的工作原理
  • anaconda,docker和Jupyter Notebook常见问题解答
  • 【Rust日报】2022-10-01 Rumqtt:基于rust的mqtt代理
  • STM32 GPIO模拟UART串口:外部时钟及TIM方式
  • (机器学习-深度学习快速入门)第一章第一节:Python环境和数据分析
  • 知识点17--如何将spring boot项目布置在外部tomcat中
  • 面向对象——抽象类
  • C++ 异常处理机制讲解
  • 【软考 - 高级系统架构设计师】考前冲刺计划 及 国庆作息时间
  • Typescript的数组类型
  • [分享]iOS开发 - 实现UITableView Plain SectionView和table不停留一起滑动
  • 【个人向】《HTTP图解》阅后小结
  • Android组件 - 收藏集 - 掘金
  • go语言学习初探(一)
  • LeetCode18.四数之和 JavaScript
  • nodejs实现webservice问题总结
  • PHP 小技巧
  • python 学习笔记 - Queue Pipes,进程间通讯
  • Python_OOP
  • React16时代,该用什么姿势写 React ?
  • Shell编程
  • Swift 中的尾递归和蹦床
  • 浮动相关
  • 回流、重绘及其优化
  • 精彩代码 vue.js
  • 扫描识别控件Dynamic Web TWAIN v12.2发布,改进SSL证书
  • 实战|智能家居行业移动应用性能分析
  • 原生JS动态加载JS、CSS文件及代码脚本
  • gunicorn工作原理
  • Linux权限管理(week1_day5)--技术流ken
  • 阿里云服务器如何修改远程端口?
  • ​用户画像从0到100的构建思路
  • #includecmath
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (C#)获取字符编码的类
  • (C语言)深入理解指针2之野指针与传值与传址与assert断言
  • (pojstep1.1.1)poj 1298(直叙式模拟)
  • (六)软件测试分工
  • (论文阅读23/100)Hierarchical Convolutional Features for Visual Tracking
  • (十六)串口UART
  • (五)大数据实战——使用模板虚拟机实现hadoop集群虚拟机克隆及网络相关配置
  • (转)ABI是什么
  • .apk 成为历史!
  • .Net Redis的秒杀Dome和异步执行
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .net 使用ajax控件后如何调用前端脚本
  • .NET/C# 在代码中测量代码执行耗时的建议(比较系统性能计数器和系统时间)...
  • .NET单元测试
  • [2016.7.test1] T2 偷天换日 [codevs 1163 访问艺术馆(类似)]