整体架构
tomcat
的整体架构在server.xml
配置文件中体现的整体视图如上。
server组件
Tomcat
的一个实例,通常一个JVM
只能包含一个Tomcat
实例;因此,一台物理服务器上可以在启动多 个JVM
的情况下在每一个JVM
中启动一个Tomcat
实例,每个实例分属于一个独立的管理端口。这是一个顶级组件。
- 提供监听器机制,用于在整个
Tomcat
生命周期中对不同的事件进行处理。 - 提供了
Tomcat
容器全局的命名资源实现。 - 监听某个端口以接收
SHUTDOWN
命令。
Service组件
一个
Service
组件通常包含多个用于接收客户端消息的Connector
组件和一个处理请求的Engine
组件。不同 的Connector
组件使用不同的通信协议,如HTTP
协议和AJP
协议,此外还包含了若干个Executor
组件,每个Executor
都是一 个线程池,它可以为Service
内所有组件提供线程池。
Connector组件
主要的职责就是接收客户端连接并接收消息报文,消息报文经由它解析后送往
Engine
组件处理。因为存在不 同的通信协议所以我们需要不同的Connector
组件,每种协议对应一个Connector
组件,目前Tomcat7
包含HTTP
和AJP
两种协议的Connector
。Connector
组件内部实现也会根据网络I/O
的不同分为阻塞I/O
和非阻塞I/O
。
Engine组件
Tomca
t内部有4个级别的容器,分别是Engine
、Host
、Context
、Wrapper
。Engine
代表全局Servlet
引擎,每 个Service
组件只能包含一个Engine
,但是Engine
组件可以包含若干个Host
容器组件。除了Host
之外还包含如下组件。
-
Listener
组件:可以在Tomcat
生命周期中完成某些Engine
容器相关工作的监听器。 -
AccessLog
组件:客户端的访问日志,所有客户端访问都会被记录。 -
Cluster
组件:提供集群功能,可以将Engine
容器需要共享的数据同步到集群中的其他Tomcat
实例上,Engine
中包含 的Host
组件可以共享Cluster
。 -
Pipeline
组件:Engine
容器对请求进行处理的管道。 -
Realm
组件:提供了Engine
容器级别的用户-密码-权限的数据对象,配合资源认证模块使用。
Host组件
Tomcat
中Host
组件代表虚拟主机,这些虚拟主机可以存放若干Web
应用的抽象(Context
容器)。除了Context
之外 还包含如下组件。
-
Listener
组件:可以在Tomcat
生命周期中完成某些Engine
容器相关工作的监听器。 -
AccessLog
组件:客户端的访问日志,所有客户端访问都会被记录。 -
Cluster
组件:提供集群功能,可以将Host
容器需要共享的数据同步到集群中的其他Tomcat
实例上。 -
Pipeline
组件:Host
容器对请求进行处理的管道。 -
Realm
组件:提供了Host
容器级别的用户-密码-权限的数据对象,配合资源认证模块使用。
Context组件
Context
组件是Web
应用的抽象,我们发开的Web
应用部署到Tomcat
后运行时就会转化成Context
对象。它包 含了各种静态资源、若干Servlet
(Wrapper
容器)以及各种其他动态资源。它主要包括如下组件。
-
Listener
组件:可以在Tomcat
生命周期中完成某些Context
容器相关工作的监听器。 -
AccessLog
组件:客户端的访问日志,所有客户端访问都会被记录。 -
Pipeline
组件:Context
容器对请求进行处理的管道。 -
Realm
组件:提供了Context
容器级别的用户-密码-权限的数据对象,配合资源认证模块使用。 -
Loader
组件:Web
应用加载器,用于加载Web
应用的资源,它要保证不同Web
应用之间的资源隔离。 -
Manager
组件:会话管理器,用于管理Web
容器的会话,包括维护会话的生成、更新、销毁。 -
NamingResource
组件:命名资源,它负责将server.xml
和web
应用的context.xml
资源映射到内存中。 -
Mapper
组件:servlet
映射器,它属于context
内部的路由映射器,负责context
容器的路由导航。 -
Wrapper
组件:Context
子容器。
Wrapper组件
是
Tomcat4
个级别的容器中最小的,与之相对应的是Servlet
,一个Wrapper
对应一个Servlet
。它主要包括如 下组件。
-
Servlet
组件:Servlet
即Web
应用开发中常用的Servlet
,我们会在Servlet
中编写好请求的逻辑处理。 -
ServletPool
组件:Servlet
对象池,当Web
应用的Servlet
实现了。SingleThreadModel
接口时则会在Wrapper
中产生 一个Servlet
对象池。线程执行时,需先从对象池中获取一个Servlet
对象,ServletPool
组件能保证Servlet
对象的线程 安全。 -
Pipeline
组件:Wrapper
容器对请求进行处理的管道。