浅谈Tomcat之Tomcat结构

Tomcat的总体结构介绍

Tomcat的总体架构图下: 安全

Aaron Swartz

相关组件的大体介绍以下:服务器

  1. Server组件:Server组件是最顶级的组件,它表明Tomcat的运行实例,在一个JVM中只会包含一个Server。在Server的整个生命周期中,Server组件中的Listener组件实现事件的监听并完成相应的任务,此外Server中包含的GlobalNamingResources组件是为了方便在Tomcat中集成JNDI。除了这两个组件,Server的核心组件就是Service组件
  2. Service组件:Service是服务的抽象,它表明请求从接收处处理的全部组件的集合,一个Server组件能够包含多个Service组件,每个Service组件都包含了若干的用于接受客户端消息的Connector组件和处理请求的Engine组件以及一些Executor组件。其中不一样的Connector组件使用不一样的通讯协议,如Http协议和AJP协议等。Executor组件是一个线程池,主要是为Service内的全部组件提供任务所需的线程池。

链接器组件

  1. Connector组件:Connector组件的主要职责就是接受客户端的链接而且接受消息报文,消息报文经由Connector的解析以后送往Container组件处理。Tomcat能够处理Http协议和AJP协议等,所以Connector的分类主要由Http和AJP两种协议的Connector组件。Service组件和Connector组件的关系图以下:
    Aaron Swartz
    ,此外,Connector组件中还包含有Mapper组件和CoyoteAdapter组件。 Mapper组件:客户端请求的路由导航组件,经过它可以对一个完整的请求地址进行路由,从而根据请求地址找到对应的Servlet。 CoyoteAdapter组件:一个将Connector和Container适配起来的适配器。

容器组件

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组件负责对客户端的请求进行逻辑处理而后把结果返回给客户端

说说Tomcat的Connector组件

Connector组件主要是完成对请求报文进行解析生成Request对象、对响应报文进行解析生成Response对象。

Connector组件的架构图以下:

Aaron Swartz

其包括的主要组件以下:

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组件又被分红为两类:

  1. Connector中的Mapper负责全局路由。在程序的编写过程当中,应用程序与应用程序之间的重定向redirect就是采用的全局Mapper映射。
  2. Context中的Mapper负责局部路由,局部路由Mapper只存在于Context容器中,负责记录访问资源与Wrapper之间的映射。在程序的编写过程当中,应用程序内部的转发forward就是采用的局部Mapper映射。

Mapper组件进行路由的时候,首先将3个级别的容器进行树状划分,而后一级一级的寻找到最终的Wrapper组件(Servlet)进行逻辑的处理。

CoyoteAdapter组件:做为Connector组件和Engine容器之间的适配器。

一个Service组件实例能够包含多个Connector实例(端口都是不一样的),一个Connector实例处理一个端口上的请求。

说说Tomcat的Container组件

Tomcat的第二大核心组件就是Container(容器)组件,Tomcat中主要由四个级别的容器组件。

  1. Engine容器:为全局引擎容器,其标准实现为StandardEngine。Engine是一个全局Servlet容器,一个Engine容器能够包含多个Host容器。
  2. Host容器:Host组件是Engine容器的子组件,它表明一个虚拟主机,其标准实现为StandardHost。一个Host容器能够包含多个Context容器。
  3. Context容器:一个Context组件对应一个Web应用程序,Context容器能够实现将Web项目中包含的组件转化成容器中的组件。
  4. Wrapper容器:一个Wrapper组件对应一个Servlet对象或者一个Servlet对象池。Wrapper组件用于处理请求的具体逻辑,
相关文章
相关标签/搜索