Tomcat整体结构及组件如下图所示
- Server
a.提供监听机制,用于在Tomcat整个生命周期中对不同事件进行处理。
b.提供Tomcat容器全局的命名资源实现
Tomcat的运行实例的抽象,包含若干个Listener组件、GlobalNamingResource组件及若干个Service组件。 - Service
Service组件由若干个Connector组件和Executor组件组合而成。
Connector组件负责监听某端口的客户端请求,不同端口对应不同的Connector。
Executor组件在Service抽象层提供了线程池,让Service下的组件可以共用线程池。
默认情况下,不同的Connector组件会自己创建线程池来使用。其他组件也可以共享Service线程池。 - Connector
Connector是Tomcat最核心的两个组件之一,主要负责接收客户端连接和客户端请求的处理加工。
每个Connector都指定一个端口进行监听,分别对请求报文解析和对响应报文组装,解析生成Request对象,组装生成Response对象,可以有多个Connector。
Protocol组件:是协议的抽象,将不同的协议进行了封装,如:HTTP协议和AJP协议。
EndPoint组件:是接收端的抽象,BIO模式有JioEndpoint,NIO模式有NioEndpoint和本地I/O模式的AprEndpoint。
Acceptor组件:用于接收客户端连接的接收器。
Executor组件:Connector自己的私有线程池。
Processor组件:处理客户端请求的处理器,不同的协议和不同的I/O模式有不同的处理方式。
Mapper组件:路由器,对客户端请求URL的映射,通过它可以将不同的请求转发到对应的Host组件、Context组件、Wrapper组件进行处理并响应给客户端。即将请求发送到某虚拟主机上的某个web应用的某个servlet。
CoyoteAdapter组件:适配器,将Connector组件和Engine容器适配连接起来。把接收到的客户端的请求报文解析成请求对象和响应对象传递到Engine容器,交由容器处理。
目前Tomcat支持两种Connector,支持HTTP协议与AJP协议的Connector,Connector组件的不同体现在其协议及I/O模式的不同。HTTP Connector所支持的协议版本为HTTP/1.1和HTTP/1.0。每个Connector实例对应一个端口,在同一个Service中可以设置若干个Connector实例,端口必须不同,协议可以相同。如Http11Protocol(BIO模式)、Http11NioProtocol(NIO模式)。 - Engine
全局引擎容器,标准实现是StandardEngine。
Host组件:是Engine容器的子容器,表示一个虚拟主机,不同的域名被抽象成一个Host。
AccessLog组件:负责记录客户端请求访问日志,Engine容器是一个全局的Servlet容器,记录的日志为所有客户端的请求,无论访问哪个虚拟主机。
Pipeline组件:Pipeline属于一种设计模式,将不同级别的容器串联起来的通道,请求进来的时候就可以通过管道进行流转处理。
Cluster组件:有Engine和Host两个级别的集群
Realm组件:存储了用户、密码及权限等数据,主要是配合Tomcat实现资源认证模块 - Host
表示虚拟主机,一个Engine可以包含若干个Host容器,一个Host容器可以包含若干个Context容器。 - Context
Context容器包含若干个Wrapper组件、Realm组件、AccessLog组件、Manager组件等。
Manager组件:维护会话的生成、更新、销毁。每个Context都有自己的会话管理器。
Wrapper是Tomcat中最小级别的容器。其他组件不再赘述。 - Wrapper
包含servlet和servlet对象池
servlet对象池是为了支持一个Servlet对象对应一个线程的SingleThreadModel接口而使用的策略,Wrapper会有一个Servlet堆,负责保存若干个Servlet对象,当需要Servlet对象时从堆中pop出一个对象,当用完之后push回堆中。Wrapper容器中最多可以有20个某servlet类对象。超过会阻塞等待,直到有可用对象为止。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。