Tomcat的总体架构图下: 安全
相关组件的大体介绍以下:服务器
Tomcat内部有4个级别的容器,分别是Engine、Host、Context和Wrapper。架构
Engine组件:app
Engine表明全局的Servlet引擎,每个Service组件只能包含一个Engine容器组件,可是一个Engine组件能够包含多个Host组件,除了Host组件以外,还包含如下的组件。spa
1. Listener组件:能够在Tomcat生命周期中完成某一些Engine容器相关工做的监听器
2. AccessLog组件:客户端的访问日志,全部客户端访问都会被记录
3. Cluster组件:提供集群功能,能够将Engine容器须要共享的数据同步到集群中的其余班的Tomcat实例上。
4. Pipline组件:Engine容器对请求进行处理的管道
5. Realm组件:提供了Engine容器级别的权限认证的功能。
复制代码
Host组件:线程
Tomcat中Host组件表明的是虚拟主机,其中存放着若干的抽象的Web应用。Host组件除了包含Context组件以外还包含如下的组件3d
1. Listener组件:能够在Tomcat生命周期中完成某一些Host容器相关工做的监听器
2. AccessLog组件:客户端的访问日志,用于记录指定虚拟主机上全部Web应用的访问。
3. Cluster组件:提供集群功能,能够将Host容器须要共享的数据同步到集群中的其余班的Tomcat实例上。
4. Pipline组件:Host容器对请求进行处理的管道
5. Realm组件:提供了Host容器级别的权限认证的功能。
复制代码
Context组件:日志
Context组件是Web应用的抽象,其包含了各类静态资源、若干Servlet(Wrapper容器)以及各类其余动态资源。其除了包含主要的Wrapper组件以外还包括如下的组件:code
1. Listener组件:能够在Tomcat生命周期中完成某一些Context容器相关工做的监听器
2. AccessLog组件:客户端的访问日志,用于记录对特定Web应用的访问
3. Pipline组件:Context容器对请求进行处理的管道
4. Realm组件:提供了Context容器级别的权限认证的功能。
5. Loader组件:Loader组件是Web应用的加载器,用于加载Web应用的资源并实如今不一样Web应用之间资源的隔离
6. Manager组件:会话管理器,用于管理对应Web容器的会话,包括维护会话的生成、更新和销毁。
7. NamingResource组件:进行资源的命名,其负责将Tomcat配置文件的server.xml和Web应用的context.xml资源和属性映射到内存中
8. Mapper组件:Servlet映射器,负责Context容器内部请求的路由导航
复制代码
Wrapper组件:cdn
一个Wrapper组件对应着一个Servlet,其主要包含如下的组件
1. Servlet组件:Servlet是请求处理的基本单元
2. ServletPool组件:Servlet对象池,用于保证Servlet对象的线程安全。
3. Pipeline组件:Wrapper容器对请求进行处理的管道
复制代码
总之,Tomcat从功能上能够抽象的看作是由链接器组件(Connector)和容器组件(Container)组成。Connector组件负责在服务器端处理客户端的链接,包括接受客户端的链接、接受客户端的消息,对消息报文进行解析。Container组件负责对客户端的请求进行逻辑处理而后把结果返回给客户端
Connector组件主要是完成对请求报文进行解析生成Request对象、对响应报文进行解析生成Response对象。
Connector组件的架构图以下:
其包括的主要组件以下:
Protocol组件:对不一样协议(如Http协议、AJP协议等)的处理作了抽象。其包含的Endpoint组件是接收端的抽象,对于不一样的I/O模式,Endpoint也存在多种类型的Endpoint,如BIO模式下的JIoEndpoint,NIO模式下的NioEndpoint和本地库I/O模式下的AprEndpoint。Endpoint包含的组件Acceptor是专门用于处理客户端链接的接收器组件,Executor是处理客户端请求的链接池组件。Processor组件是处理客户端请求的处理器。
Protocol组件的类型有:Http11Protocol、Http11NioProtocol、Http11AprProtocol、AjpProtocol、AjpNioProtocol、AjpAprProtocol
Mapper组件:又称请求URI映射器Mapper,提供对客户端请求URL地址的映射功能,Tomcat经过Connector中包含的Mapper组件将请求转发给对应的Host组件、Context组件和Wrapper组件,最终实现Tomcat将客户端的请求路由处处理业务逻辑的Servlet上。Mapper组件又被分红为两类:
redirect
就是采用的全局Mapper映射。forward
就是采用的局部Mapper映射。Mapper组件进行路由的时候,首先将3个级别的容器进行树状划分,而后一级一级的寻找到最终的Wrapper组件(Servlet)进行逻辑的处理。
CoyoteAdapter组件:做为Connector组件和Engine容器之间的适配器。
一个Service组件实例能够包含多个Connector实例(端口都是不一样的),一个Connector实例处理一个端口上的请求。
Tomcat的第二大核心组件就是Container(容器)组件,Tomcat中主要由四个级别的容器组件。