Servlet/JSP深入详解
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.6 Tomcat的体系结构

Tomcat服务器是由一系列可配置的组件构成的,其中核心组件是Catalina Servlet容器,它是所有其他Tomcat组件的顶层容器。Tomcat各组件之间的层次关系如图1-20所示。

图1-20 Tomcat组件之间的层次结构

我们下面简单介绍一下各组件在Tomcat服务器中的作用。

(1)Server

Server表示整个的Catalina Servlet容器。Tomcat提供了Server接口的一个默认实现,这通常不需要用户自己去实现。在Server容器中,可以包含一个或多个Service组件。

(2)Service

Service是存活在Server内部的中间组件,它将一个或多个连接器(Connector)组件绑定到一个单独的引擎(Engine)上。在Server中,可以包含一个或多个Service组件。Service也很少由用户定制,Tomcat提供了Service接口的默认实现,而这种实现既简单又能满足应用。

(3)Connector

连接器(Connector)处理与客户端的通信,它负责接收客户请求,以及向客户返回响应结果。在Tomcat中,有多个连接器可以使用。

(4)Engine

在Tomcat中,每个Service只能包含一个Servlet引擎(Engine)。引擎表示一个特定的Service的请求处理流水线。作为一个Service可以有多个连接器,引擎从连接器接收和处理所有的请求,将响应返回给适合的连接器,通过连接器传输给用户。用户允许通过实现Engine接口提供自定义的引擎,但通常不需要这么做。

(5)Host

Host表示一个虚拟主机,一个引擎可以包含多个Host。用户通常不需要创建自定义的Host,因为Tomcat给出的Host接口的实现(类StandardHost)提供了重要的附加功能。

(6)Context

一个Context表示了一个Web应用程序,运行在特定的虚拟主机中。什么是Web应用程序呢?在Sun公司发布的Java Servlet规范中,对Web应用程序做出了如下的定义:“一个Web应用程序是由一组Servlet、HTML页面、类,以及其他的资源组成的运行在Web服务器上的完整的应用程序。它可以在多个供应商提供的实现了Servlet规范的Web容器中运行”。一个Host可以包含多个Context(代表Web应用程序),每一个Context都有一个唯一的路径。用户通常不需要创建自定义的Context,因为Tomcat给出的Context接口的实现(类StandardContext)提供了重要的附加功能。

下面我们通过图1-21来帮助读者更好地理解Tomcat服务器中各组件的工作流程。

图1-21 Tomcat各组件的工作流程

要了解这些组件的其他信息,可以看下面的页面:

        %CATALINA_HOME%\webapps\docs\architecture\overview.html

我们可以在conf目录下的server.xml文件中对这些组件进行配置,读者打开server.xml文件,就可以看到元素名和元素之间的嵌套关系,与Tomcat服务器的组件是一一对应的,server.xml文件的根元素就是<Server>。关于server.xml配置文件中的各元素及其属性的含义,请参看附录C。

在Tomcat中,提供了各组件的接口及其实现类,如果你要替换Tomcat中的某个组件,只需要根据该组件的接口或类的说明,重写该组件,并进行配置即可。图1-22是Tomcat各组件的类图。

图1-22 Tomcat的组件类图

在类图的接口名或类名下面是该接口或该类所在的包,这些接口和类都在%CATALINA_HOME%\lib\catalina.jar文件中。对Tomcat服务器的实现感兴趣的读者,可以从http://tomcat.apache.org/download-60.cgi上下载Tomcat的源代码。

由于Apache软件基金会并不是一个商业性的组织,所以文档更新的速度有时候跟不上版本更新的速度。在Tomcat 6.0.16中,就可以发现文档与其源码实现有不一致的地方。从Tomcat 5.5开始,Tomcat的实现中就已经去掉了org.apache.catalina.Connector接口及其相关的实现类,而直接以org.apache.catalina.connector.Connector类来代替。我们在看Tomcat的文档时,最好结合其API文档一起看,这样才能保证了解的信息是完整和准确的。