Tomcat9.0 请求流程解析

3 篇文章 0 订阅
1 篇文章 0 订阅

近期开发任务不是特别重,因此写写博客做一些积累,由于本人刚开始接触源码,对tomcat还不是特别熟悉,勿喷,在这只是记录看的过程中的一些理解,后期如果有新的理解,会继续更新,这只是很简单的流程,很多细节需要具体分析,对于一些关键步骤做了记录。

1.开启Acceptor线程和Poller线程

        首先Tomcat启动的时候会创建一个Acceptor线程和一个NioEndPoing.Poller线程,在线程中会阻塞接收socket连接,每次接收到一个socket连接的时候,会把socket封装到NioChannel对象里面,并以此创建一个PollerEvent对象放到队列中,而这时,Poller线程是一个无限循环监听的线程,当队列中存在socket的时候就会去处理socket。

部分关键代码:

(1)阻塞直到有socket连接,接收到socket后注册到PollerEvent队列中

       

(2)NioEndPoint.Poller.run():Poller线程监听队列

(3)NioEndPoint.processKey:处理socket

2.AbstractEndPoint处理socket

        在这会调用AbstractEndPoint中的processSocket方法,此时会创建一个线程并把该线程交给线程池去执行

部分关键代码:

3.AbstractProtocol处理socket

部分关键代码:

4.Http11Processor.service 把request和response向下传递

部分关键代码:

后续很多步骤都类似,运用责任链模式对组件调用,在这直接到最后一步。

5.StandardWrapper.invoke 创建servlet和过滤器链

        在创建servlet对象的时候会先判断该servlet是否实现了SingleThreadedModel,如果未实现该类则创建单例的Servlet对象,反之创建多例。

6.ApplicationFilterChain.internalDoFilter 过滤器链回调自定义的过滤器和Servlet.service方法

        该类中维护了一个Filter数组,当tomcat启动时就把过滤器放到了该数组中,会按顺序回调自定义Filter中的doFilter方法,当过滤器都调用完毕,才会调用Servlet中的service方法。

以上就是我对请求从Tomcat到servlet执行流程的简单理解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值