闲来无事,分析一下页面发一次请求需要经过哪些类;
首先直接从过滤器开始说,ApplicationFilterChain,这个过滤器是tomacat下面的;

走过这个过滤器之后,就到了我们最核心的DispacherServlet这个调度器了;
到了DispacherServlet之后,这个请求首先会走的就是service这个方法;

这个主要就是交换下request,response的值;
这个时候service方法就是走的是 DispacherServlet的父类FrameworkServlet里面的service方法;
HttpMethod这个确定请求的是什么方法,这个请求的是GET,然后继续走的是FrameworkServlet的父类HttpServlet的doGet方法;

然后由于父类没有doGet方法,就去子类FrameworkServlet找寻doGet方法,

processRequest(request,response)这个方法就是处理一些request的变量和方法;

最主要的就是doService这个方法,这个方法会跳到DispacherServlet的doService(request,response);
这个方法里面最主要的就是doDispacher()这个方法了,

经过这个方法就是去RequestMappingInfo 这个类去匹配,检查此请求映射信息中的所有条件是否与提供的请求和返回匹配,得到请求的URL,返回RequestMappingInfo 这个对象;

然后到这个RequestMappingInfoHandlerMapping,然后到RequestMappingInfoHandlerMapping的addMatchingMappings方法

把请求的URL转成对象,塞入集合,转到AbstractHandlerMethodMapping里面的lookupHandlerMethod方法,

得到该URL映射的控制器以及方法;
然后到了DispacherServlet里面的doDispacher()方法;

然后就可以跳到URL对应的方法上了;
本文详细解析了Spring MVC框架中请求的处理流程,从Tomcat的ApplicationFilterChain过滤器开始,深入到DispatcherServlet的核心作用,再到RequestMappingInfo的匹配过程,最终到达具体的控制器方法。
549

被折叠的 条评论
为什么被折叠?



