闲来无事,分析一下页面发一次请求需要经过哪些类;

首先直接从过滤器开始说,ApplicationFilterChain,这个过滤器是tomacat下面的;

记一次HTTP请求实例(笔记)

走过这个过滤器之后,就到了我们最核心的DispacherServlet这个调度器了;

到了DispacherServlet之后,这个请求首先会走的就是service这个方法;

记一次HTTP请求实例(笔记)

这个主要就是交换下request,response的值;

这个时候service方法就是走的是 DispacherServlet的父类FrameworkServlet里面的service方法;

记一次HTTP请求实例(笔记)HttpMethod这个确定请求的是什么方法,这个请求的是GET,然后继续走的是FrameworkServlet的父类HttpServlet的doGet方法;

记一次HTTP请求实例(笔记)

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

记一次HTTP请求实例(笔记)

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

记一次HTTP请求实例(笔记)

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

这个方法里面最主要的就是doDispacher()这个方法了,

记一次HTTP请求实例(笔记)

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

记一次HTTP请求实例(笔记)

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

记一次HTTP请求实例(笔记)

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

 记一次HTTP请求实例(笔记)

 得到该URL映射的控制器以及方法;

然后到了DispacherServlet里面的doDispacher()方法;

记一次HTTP请求实例(笔记)

然后就可以跳到URL对应的方法上了;

相关文章: