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

posted @   zpchcbd  阅读(503)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· 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
点击右上角即可分享
微信分享提示