【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>>
此篇主要讲Tomcat8从接收请求到处理请求的时序图画出来,并用文字描述一下主要流程
时序图

说明
文字描述流程之前先提示如下两点:
1.Acceptor、Poller、SocketProcessor都是NioEndpoint的内部类
2.Tomcat不一定只有NioEndpoint还有Nio2Endpoint AprEndpoint,只是常规的请求和默认都使用的是http和nio,所以在时序图中就用NioEndpoint了
Acceptor负责接收发起的请求,经过NioEndpoint和Poller将socket最终包装为一个PollerEvent放入到SynchronizedQueue同步队列当中,接着继续等待新的请求到底重复前面的步骤
Poller循环判断同步队列中是否有问题处理的Event,如果有则使用WindowsSelectorImpl读取socket,将socket中的attachment添加到SocketProcessor( implements runnable),使用线程池启动SocketProcessor
SocketProcessor经过一层层调用开始Engine-Host-Context-Wrapper的Pipeline的First Valve,最后由StandardWrapperValve调用ApplicationFilterChain调用HttpServlet的service,进而调用到自己的Servlet中的doXxx方法
来源:oschina
链接:https://my.oschina.net/u/3049601/blog/3141730