谈谈 Tomcat 请求处理流程

发布时间:2025-01-17 点击:26
很多东西在时序图中体现的已经非常清楚了,没有必要再一步一步的作介绍,所以本文以图为主,然后对部分内容加以简单解释。
绘制图形使用的工具是 plantuml + visual studio code + plantuml extension
本文对 tomcat 的介绍以 tomcat-9.0.0.m22 为标准。
tomcat-9.0.0.m22 是 tomcat 目前最新的版本,但尚未发布,它实现了 servlet4.0 及 jsp2.3 并提供了很多新特性,需要 1.8 及以上的 jdk 支持等等,详情请查阅 tomcat-9.0-doc。
https://tomcat.apache.org/tomcat-9.0-doc/index.html
initserversocket(),通过 serversocketchannel.open() 打开一个 serversocket,默认绑定到 8080 端口,默认的连接等待队列长度是 100, 当超过 100 个时会拒绝服务。我们可以通过配置 conf/server.xml 中 connector 的 acceptcount 属性对其进行定制。createexecutor() 用于创建 worker 线程池。默认会启动 10 个 worker 线程,tomcat 处理请求过程中,woker 最多不超过 200 个。我们可以通过配置 conf/server.xml 中 connector 的 minsparethreads 和 maxthreads 对这两个属性进行定制。pollor 用于检测已就绪的 socket。默认最多不超过 2 个,math.min(2,runtime.getruntime().availableprocessors());。我们可以通过配置 pollerthreadcount 来定制。acceptor 用于接受新连接。默认是 1 个。我们可以通过配置 acceptorthreadcount 对其进行定制。request process
acceptor
需要注意的是,基本上每一个容器的 standardpipeline 上都会有多个已注册的 valve,我们只关注每个容器的 basic valve。其他 valve 都是在 basic valve 前执行。request.gethost().getpipeline().getfirst().invoke() 先获取对应的 standardhost,并执行其 pipeline。request.getcontext().getpipeline().getfirst().invoke() 先获取对应的 standardcontext,并执行其 pipeline。request.getwrapper().getpipeline().getfirst().invoke() 先获取对应的 standardwrapper,并执行其 pipeline。最值得说的就是 standardwrapper 的 basic valve,standardwrappervalveallocate() 用来加载并初始化 servlet,值的一提的是 servlet 并不都是单例的,当 servlet 实现了 singlethreadmodel 接口后,standardwrapper 会维护一组 servlet 实例,这是享元模式。当然了 singlethreadmodel在 servlet 2.4 以后就弃用了。createfilterchain() 方法会从 standardcontext 中获取到所有的过滤器,然后将匹配 request url 的所有过滤器挑选出来添加到 filterchain 中。dofilter() 执行过滤链,当所有的过滤器都执行完毕后调用 servlet 的 service() 方法。reference
《how tomcat works》https://www.amazon.com/how-tomcat-works-budi-kurniawan/dp/097521280x《tomcat 架构解析》– 刘光瑞http://product.dangdang.com/25084132.htmltomcat-9.0-dochttps://tomcat.apache.org/tomcat-9.0-doc/index.htmlapache-tomcat-9.0.0.m22-srchttp://www-eu.apache.org/dist/tomcat/tomcat-9/v9.0.0.m22/src/tomcat架构分析 (connector nio 实现)http://gearever.iteye.com/blog/1844203


网站推广要如何才能做好呢?
网站的优化常见的四种的垃圾代码
公司近期推出产品类网站套餐服务
网站制作好了就万事大吉了
云服务安全保护的措施有哪些,怎样做好?
新媒体之企业微博营销策略
移动网站建设体验决定成败
做好关键词布局有利于网站排名