阅读本文需要 5 分钟
tips:本文属于 Spring MVC 请求流程 - 基于源码解读 的小分支
DEBUG
-
在org.springframework.web.servlet.DispatcherServlet#getHandler处打断点
发现处理器映射器有两个:- BeanNameUrlHandlerMapping
- RequestMappingHandlerMapping
-
进入
getHandler
方法,这个方法主要是先尝试获取 handler,然后再获取拦截器,返回执行链,这里我们把注意放在获取 handler 的方法上面,也就是getHandlerInternal
-
进入
getHandlerInternal
方法,从当前请求解析出要查找的url,然后继续寻找 handler-
第一个处理器处理器映射器进入了 AbstractUrlHandlerMapping 的 getHandlerInternal,但结果为null
-
第二个处理器映射器进入了 AbstractHandlerMethodMapping 的 getHandlerInternal,找到了handler
对于为什么第二个处理器能获取到 handler ,可以看到urlLookup
存储了要查找的urlPath
,两者能匹配
-