Tomcat源码分析【十七】请求处理过程分析之简单总结

扫码关注公众号:Java 技术驿站

发送:vip
将链接复制到本浏览器,永久解锁本站全部文章

【公众号:Java 技术驿站】 【加作者微信交流技术,拉技术群】
免费领取10G资料包与项目实战视频资料

文章首发于:clawhub.club


经过几篇的分析,终于将Tomcat请求处理过程分析完了,大概分为四个阶段:

Acceptor接收请求,将请求封装发送到Poller

  • Acceptor启动后监听请求,阻塞在ServerSocketChannel.accept()方法处,当有新连接时,返回ScoketChannel。
  • 将ScoketChannel封装为NioChannel,注册到Poller
  • Poller的addEvent方法,将请求加入到PollerEvent队列中。

Poller监听事件,当Socket可读或者可写时,将Socket添加到Worker工作队列

  • 每个Poller维护一个Selector,Poller启动后,阻塞在select方法
  • 将Socket的SocketChannel注册到Selector上,当Socket可读时,Poller对其处理
  • 将Socket封装到SocketProcessor中,加入到worker线程池中处理

Worker对请求进行封装,调用容器的pipeline,将请求交由Container

  • Http11Processor将Socket解析,封装org.apache.coyote.Request
  • CoyoteAdapter调用service(Request req, Response res)方法
    这里的Request为org.apache.coyote.Request;Response为:org.apache.coyote.Response
  • 将请求和响应交由容器的valve处理, invoke(Request request, Response response)
    这里的Request为org.apache.catalina.connector.Request;Response为:org.apache.catalina.connector.Response

Container通过层层Valva对请求进行处理

  • Engine、Host、Context、Wrapper各层容器都相应注册各种Valve
  • 主要看StandardWrapperValve的invoke处理
    首先加载并初始化Servlet,之后创建过滤器链,最后执行过滤器链,在执行完毕之后会调用Servlet的service方法。

以上就是Tomcat的请求处理过程。


来源:https://www.jianshu.com/u/9632919f32c3

赞(0) 打赏
版权归原创作者所有,任何形式的转载请联系博主:daming_90:Java 技术驿站 » Tomcat源码分析【十七】请求处理过程分析之简单总结

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏