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服務器中各組件的工作流程。
要了解這些組件的其他信息,可以看下面的頁面:
%CATALINA_HOME%\webapps\docs\architecture\overview.html |
(點擊查看大圖)圖1-21 Tomcat各組件的工作流程 |
在Tomcat中,提供了各組件的接口及其實現類,如果你要替換Tomcat中的某個組件,只需要根據該組件的接口或類的說明,重寫該組件,並進行配置即可。圖1-22是Tomcat各組件的類圖。
(點擊查看大圖)圖1-22 Tomcat的組件類圖 |
在類圖的接口名或類名下面是該接口或該類所在的包,這些接口和類都在%CATALINA_HOME%\lib\catalina.jar文件中。對Tomcat服務器的實現感興趣的讀者,可以從http://tomcat.apache.org/download-60.cgi上下載Tomcat的源代碼。