首先理解分析一下Tomcat的核心配置文件
Tomcat服务器是由一系列可配置的组件构成,其中核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。Tomcat的组件可以在<CATALINA_HOME>/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。以下代码呈现了各种Tomcat组件之间的关系:
<Server>
<Service>
<Connector/>
<Engine>
<Host>
<Context>
</Context>
</Host>
</Engine>
</Service>
</Server>
以上XML代码中,每个元素都代表一种Tomcat组件。
这些元素可分为四类。
1、 顶层元素类<Server>\<Service>
a) Server元素类
i. <Server>元素代表整个Catalina Servlet容器,因此它在conf/server.xml文件中必须是单独的最外层元素,它的属性表示整个Servlet容器的特征。<Server>元素中可包含一个或多个<Service>元素和GlobalNamingResources元素。
b) Service元素类
i. 一个Service元素表示一个或者多个Connector元素组件的组合,这些Connector元素组件共享一个单独的Engine组件用于处理客户端到来的请求。可以有一个或多个Service元素。
2、 连接器元素类<Connector>
连接器元素类代表了介于客户与服务器之间的通信接口,负责将客户的请求发送个服务器,并将服务器的响应结果传递给客户。
a) Http Connector
i. Http Connector元素表示一个支持HTTP/1.1协议的Connector组件.它除了他的执行Servlet和JSP页面的能力之外它使Catalina的功能能够成为一个独立的Web服务器。这个组件的一个实例在服务器的一个特定的TCP端口号上监听客户端到来的连接。一个或多个这样的Connector能被配置为单个Service的部件,附送到管理的Engine去执行请求处理和创建响应。
b) AJP Connector
AJP Connector元素表示一个Connector组件,它通过这个AJP协议与一个Web Connector进行通信。这被用于你希望去整合Tomcat到一个存在的或新的Apache安装的情形。并且你希望Apache去处理Web项目包含的静态内容,并且或者利用Apache的SSL处理。
3、 容器元素类
容器元素类代表处理客户请求并生成响应的结果的组件,有3种容器类型元素,他们是Engine、Host和Context。
3.1、Engine组件为特定的Service组件处理所有客户请求,每个<Service>元素只能包含一个<Engine>元素。<Engine>元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求。并且返回完整的响应给Connector作为最终的传输返回给客户端。
3.2、Host组件为特定的虚拟主机处理所有客户请求,一个<Engine>元素中可以包含多个<Host>元素。每个<Host>元素定义了一个虚拟主机,它可以包含一个或多个Web应用。虚拟主机通常是一个网络名的关联,客户端使用虚拟主机的网络名可以连接到一个Tomato服务器。这个网络名必须在DNS服务器注册。
在许多情况下,系统管理员希望关联多于一个网络名到相同的虚拟主机和应用程序,这个可以通过使用主机别名<Alias>来完成。
一个或者多个Host元素被嵌套在一个Engine元素,在这个Host元素里面,对于与这个虚拟主机关联的web应用程序你能嵌套Context元素在它里面。与某个Engine关联的这些虚拟主机中的某一个必须有一个名字匹配Engine元素的defaultHost属性。
客户端通常使用主机名来标识它希望连接的服务器。这个主机名也被包含在HTTP请求头。Tomcat从HTTP请求头提取这个主机名并且使用一个匹配名字查询一个Host。如果没有匹配被发现,这个请求被路由到缺省主机。
3.3、Context组件为特定的Web应用处理所有客户请求。<Context>元素是使用最频繁的元素。每个<Context>元素代表了运行在虚拟主机上的单个Web应用程序,它运行在一个实际的虚拟主机内,每个Web应用程序是基于一个Web应用程序档案文件或者一个相应目录包含相应的解包内容。
Web应用程序处理每个HTTP请求的选择方式是基于请求URI的最长可能前缀匹配原则,一旦被选择,Context将依照servlet mapping的定义来选择一个合适的Servlet来处理到来的请求。
你可以定义多个Context元素,如果你需要的话。每个Context必须拥有一个唯一的Context名字。
一个<Host>元素中可以包含多个<Context>元素。
4、 嵌套类元素
嵌套类元素代表了可以加入到容器中的组件,如<Logger>元素、<Valve>元素和<Realm>元素。
Tomcat中各个组件之间的关系: