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来进行处理。