Tomcat中间件-Servlet的加载流程
前言:Servlet在Tomcat是如何被生成,如何被调用的,这篇作为这些过程的笔记
简单分析
根据如下的Tomcat的架构图所示,一个HTTP请求应该是在EndPoint处接收,然后再来到Processor进行处理,接着通过Adapter进行封装为Servlet对象的相关类,最后才是被Container中的对象来进行处理
简单的整理下,其实流程就应该是如下所示
寻找HTTP请求监听入口点
这里就直接给了入口点是哪里了
org/apache/tomcat/util/net/NioEndpoint.java#processKey,这个方法提供了对外部请求socket的处理方法
上面获取到了这个socket之后,这里就会准备通过缓存池中取出相关processor对象来对这个socket进行处理
SocketProcessor这个对象是一个实现了Runnable的对象,所以它在线程池运行的执行,则调用的是它的run方法
接着就是processor对象的出场,这里会对这个socket来进行处理
一般对socket处理的processor对象都是Http11Processor对象
继续跟
接着就是来到了processor对象的处理分支过程,因为上面走的分支是read,所以这里processor走的也是read分支
processor会将这个处理继续转接给Adapter对象,让它对这个request/response来进行转换Servelt的Request/Response
Adapter对象进行转换操作
转换完了之后Adapter之后就开始进行通过Container组件来进行invoke反射调用
Engine引擎反射调用
这里跟进去为什么会出现AccessLogValve的反射调用呢?其实这个跟server.xml也有关系,因为配置中有包含这个组件的调用
接着就会涉及到HOST到Context的过渡
再之后就是Context会选取对应的解析器来进行过渡,就比如有存在jsp和Servlet这两种情况
再最后的话就是调用这个jsp/servlet了
这里其实还有一个过滤器链,但是这里就不讲了,因为自己在这篇内容中有记录过,关于过滤器链Filter,可以来看下这篇参考 https://www.cnblogs.com/zpchcbd/p/14814385.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY