SpringBoot中请求映射的原理

SpringBoot中请求映射的原理

本图是很久以前学习SpringMVC时的,本次学习拿出来对照收获颇多。

带着问题学习:我们写的接口,是如何被处理的。

在SpringBoot中,所有的请求都是会来到DispatcherServlet中,而这也就是SpringMVC中的东西。

SpringBoot中请求映射的原理

从此图可以看出继承树,最终是来到HttpServlet的,也就是说必然会有doGetPost方法。而HttpServlet并没有,于是顺着关系找下去。

在FrameworkServlet中,我们发现了重写的方法:

SpringBoot中请求映射的原理


而两个方法都是调用processRequest的,进入进去:

SpringBoot中请求映射的原理


除了各种初始化过程,最终做的是调用doService方法。而FrameworkServlet中doService是抽象的,来到DispatcherServlet中找到此方法:

protected void doDispatch(HttpServletRequest request, HttpServletResponse response) throws Exception {
HttpServletRequest processedRequest = request;
HandlerExecutionChain mappedHandler =
null;
boolean multipartRequestParsed = false;
WebAsyncManager asyncManager = WebAsyncUtils.getAsyncManager(request);
try {
ModelAndView mv =
null;
Exception dispatchException =
null;
try {
processedRequest = checkMultipart(request);
multipartRequestParsed = (processedRequest != request);
// 找到当前请求使用哪个Handler(Controller的方法)处理
mappedHandler = getHandler(processedRequest);

//HandlerMapping:处理器映射。/xxx->>xxxx

略过一些与本次学习无关的,直接看倒数两行,将会通过getHandler方法,找到合适的Handler(Controller的方法)处理(流程2、3):

SpringBoot中请求映射的原理


而handlerMapping中会有五个值:

SpringBoot中请求映射的原理


RequestMappingHandlerMapping:保存了所有@RequestMapping 和handler的映射规则:

SpringBoot中请求映射的原理

顺便讲了欢迎页的原理:
• 请求进来,挨个尝试所有的HandlerMapping看是否有请求信息。
• 如果有就找到这个请求对应的handler
• 如果没有就是下一个 HandlerMapping

如果你啥也没传,也就是”/”,那么在
RequestMappingHandlerMapping中将不会找到合适的,然后他就会循环到下一个控制器:WelcomePageHandlerMapping:

SpringBoot中请求映射的原理


而这个控制器就是专门处理”/”的,于是根据处理,转发到index.html中。
(SpringBoot自动配置欢迎页的 WelcomePageHandlerMapping 。访问 /能访问到index.html;)

而不管是哪个控制器,找到后都会对应的操作逻辑,也就是流程5后面的事情了。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:
https://blog.csdn.net/weixin_42313246/article/details/112311353

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
的小屋世界的头像 - 鹿快
评论 抢沙发

请登录后发表评论

    暂无评论内容