参考书籍《Tomcat架构解析》
一丶Tomcat总体架构
本文沿袭《Tomcat架构解析》中启发式的方式来总结Tomcat总体架构
1 Server
从上面这段话来看,如果我们将上述功能全部让Server去做实现,那么让请求监听和请求处理耦合度很高,不利于适配。
2.Connector 和 Container
-
Engine
Connector
如是我们有下面这种设计
并且无法做到一个Tomcat服务器运行多个服务,比如订单服务,用户服务。将Connector和Engine都交给Server处理,无法实现服务间的隔离。
3.Service
Server
表示Tomcat服务器,一个Tomcat服务器可以部署多个服务,比如订单服务,用户服务。这里的服务就是Service。4.Context,Host,Wrapper
-
Host
-
Wrapper
Context
5.Container
Container表示容器,可以添加并维护子容器,因此Engine,Host,Context,Wrapper均继承自Container
6.Lifecycle
可以看到上图中组件都存在start,stop等生命周期方法,因此Tomcat抽象出Lifecycle接口,表示生命周期,定义了init,start,stop,destory等生命周期回调方法。并且还提供了LifecycleListener使用监听器模式来实现生命周期事件监听。
7.Pipeline和Valve
在Tomcat中Engine,Host,Context,Wrapper都有对应的Valve实现,同时维护了一个Pipeline,从而让我们可以对请求的处理进行扩展。
8.Connector设计
- Endpoint:tomcat中没有这个接口,只有AbstractEndpoint,它负责启动线程来监听服务器端口,并且在接受到数据后交给Processor处理
- Processor:Processor读取到客户端请求后按照请求地址映射到具体的容器进行处理,这个过程请求映射,Processor实现请求映射依赖于Mapper对象,在容器发生注册和注销的时候,MapperListener会监听到对应的事件,从而来变更Mapper中维护的请求映射信息。
- ProtocolHandler:协议处理器,针对不同的IO方式(NIO,BIO等)和不同的协议(Http,AJP)具备不同的实现,ProtocolHandler包含一个Endpoint来开启端口监听,并且包含一个Processor用于按照协议读取数据并将请求交给容器处理。
CoyoteAdapter在Processor和 Mapper以及Container中横插一脚,实现Connector和Mapper以及Container的解耦。
9.Executor
10 Bootstrap与Catalina
Tomcat提供了Bootstrap作为应用服务器启动入口,Bootstrap负责反射创建Catalina实例,根据执行参数调用Catalina相关方法完成针对应用服务器的操作(启动、停止)。
二丶Tomcat启动流程
三丶Tomcat处理一个请求的流程
应用程序的请求处理,开始于监听服务器socket端口接受到数据,结束与服务器处理结果写入Socket输出流。