核心组件和流程
- Connector连接器-对外交流
- ProtocolHandler:封装通讯和I/O模型(EndPoint底层Socket通讯+Processor应用层协议解析)
- Adapter:调用容器,生成ServletRequest和接受ServletResponse
- Container容器-对内处理
- 继承LifeCycle生命周期(一键式启停):init、start、stop、destroy
- Mapper组件负责路由
设计模式
- 核心原则:高内聚低耦合,找到子模块的变化点和不变点
- 组合模式:管理容器
- 观察者模式:发布启动事件达到解耦,满足开闭原则
- 骨架抽象类/模板方法:满足变与不变,代码复用,灵活扩展
责任链(Pipeline-Valve):处理请求,记录日志等,满足开闭原则
打破双亲委派
目的:隔离Web应用
Tomcat概念
Tomcat = http服务器(对外通讯包装为ServletRequest/ServletResponse)+servlet容器(定位+加载+调用 Servlet业务逻辑)
Servlet规范=Servlet容器+Servlet接口(doGet/doPost)
Servlet规范扩展点:Filter/Listener(弱化)
重要配置:server.xml(配置servlet)/catalina.xml(配置类加载器)/context.xml/tomcat-users.xml
体系架构

四种I/O模型:BIO/NIO/AIO(NIO2)/APR
三种应用层协议:HTTP/1.1/ AJP /HTTP/2
connector连接器
- EndPoint:网络通信【字节流】-模板方法
- Processor:序列化反序列化进行协议解析【Tomcat Request/Response】
- Adapter:对象转化【ServletResponse/ServletRequest】-适配器
container容器
构造:组合模式
请求:责任链模式(管道添加单元——Pipeline、Valve,next;Filter链——数组pos递归去调用)
生命周期
创建、初始化、启动、停止、销毁
事件——观察者模式
LifeCycle实现一键式启停——组合模式
初始化自上而下
单一职责(接口分离原则)
启动过程
startup.sh —> 启动类(Bootstrap —> Catalina)—> 组件(Server —> Service)—> Connector/Engine
两阶段依次执行:load(解析、反射构建、初始化)、start
外置Tomcat带动Spring MVC启动是通过SPI加载后调用WebApplicationInitializer#onStart启动IoC容器
Spring内置Tomcat,AbstractApplicationContext#refresh#onRefresh
NIO线程模型

Tomcat自己实现了线程池,无限队列,自己实现了拒绝策略
ContainerBackgroundProcessorMonitor 后台线程监听器,定时任务
AIO
调优
JConsole JMXRemote
并发线程调优
理论算法:并发线程数=(1+平均等待时间/平均工作时间)*CPU核心数;实际最好用压测


