1、开始debug的时候,对HttpMethod感到好奇,点进去查看一下HttpMethod究竟是何物?
-
HttpMethod 是请求方法的枚举类,结合咱浏览器地址栏的参数是直接输入,可以知道咱的HttpMethod的值是Get
-
果然咱的HttpMethod的值是Get,所以下一步会执行super.service(request, response);
-
ctr进入该方法看一下,究竟是何物,发现按ctr没有反应,那咱就按调试的F5进入吧【解决:重新打开一边该类的文件】
-
进入super.service(request, response);内部一探究竟:
-
发现这个service方法做的是请求分发操作,结合咱的请求方法是GET,所以下一步咱是到doGet去一探究竟~
-
再进入processRequest方法~
-
进入发现重点是doService(request, response);那咱就进入该方法内部一探究竟吧~
-
进入发现重点是doDispatch(request, response);那咱就进入该方法内部一探究竟吧~
2、真正的springMVC执行流程的源码分析,才真正开始~
-
因为处理器映射器返回处理器执行链对象是在咱的执行流程-“主干路线上”,咱应该进入这个返回获取到处理器执行链对象getHandler(processedRequest);方法里。
-
进入获取处理器执行链方法内部,发现了处理器映射器,通过观察调试变量Variables的值,发现处理器映射器 handlerMappings 的值正是咱配置的BeanNameUrlHandlerMapping。
-
还发现是调用适配器的getHandler方法 返回HandlerExecutionChain 处理器执行链对象—-是springMVC 执行流程的-"主干路线",进入该getHandler方法进行观察一下
- 进入AbstractUrlHandlerMapping的getHandlerInternal(HttpServletRequest request)发现:—-lookupHandler是springMVC 执行流程的-"主干路线"的查找匹配的处理器。进入该lookupHandler方法进行观察一下~
- 进入该lookupHandler方法发现:是通过路径去选择匹配的处理器—-SpringMVC的执行流程的"主干路线",到这里就很清晰的得到SpringMVC执行流程的如下过程:
✿ 到此得到SpringMVC执行流程的如下过程:客户端发送请求,请求被前端控制器接收后,前端控制器—通过处理器映射器去寻找处理器【根据路径进行配置 】—–然后返回一个处理器执行链对象.
- HandlerExecutionChain handler =
mapping.getHandler(request)
;
- Object handler =
this.handlerMap.get(urlPath);
- Object handler =
lookupHandler(lookupPath, request)
;
-
HandlerExecutionChain
★ 在执行过程中,通过调试变量Variables的值,发现处理器映射器 handlerMappings 的值正是咱配置的BeanNameUrlHandlerMapping.
★ 在执行过程中,通过选中等编译器显示的方式,咱发现urlPath路径正是咱配置的/hello.