官术网_书友最值得收藏!

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文檔一起看,這樣才能保證了解的信息是完整和準確的。

主站蜘蛛池模板: 久治县| 兴和县| 资溪县| 云龙县| 广南县| 两当县| 喀什市| 海兴县| 湾仔区| 沾益县| 崇州市| 双江| 伊金霍洛旗| 渭南市| 马龙县| 绥芬河市| 颍上县| 赤城县| 嘉鱼县| 永泰县| 台东市| 乌兰察布市| 永康市| 阜阳市| 三亚市| 高密市| 桂东县| 西乌| 修水县| 平乐县| 郴州市| 东丽区| 松潘县| 江川县| 芜湖县| 赤水市| 万盛区| 五莲县| 忻州市| 长沙市| 隆尧县|