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

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

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

记一次HTTP请求实例(笔记)_第1张图片

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

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

记一次HTTP请求实例(笔记)_第2张图片

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

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

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

记一次HTTP请求实例(笔记)_第4张图片

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

记一次HTTP请求实例(笔记)_第5张图片

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

记一次HTTP请求实例(笔记)_第6张图片

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

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

记一次HTTP请求实例(笔记)_第7张图片

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

记一次HTTP请求实例(笔记)_第8张图片

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

记一次HTTP请求实例(笔记)_第9张图片

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

 记一次HTTP请求实例(笔记)_第10张图片

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

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

记一次HTTP请求实例(笔记)_第11张图片

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

你可能感兴趣的:(原创文章)