闲来无事,分析一下页面发一次请求需要经过哪些类;
首先直接从过滤器开始说,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对应的方法上了;