- Servlet/JSP深入詳解
- 孫鑫
- 1208字
- 2019-01-01 14:48:26
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文檔一起看,這樣才能保證了解的信息是完整和準確的。
- Deploying Node.js
- 垃圾回收的算法與實現
- Mastering Python Scripting for System Administrators
- VMware vSphere 6.7虛擬化架構實戰指南
- oreilly精品圖書:軟件開發者路線圖叢書(共8冊)
- C語言程序設計立體化案例教程
- Scratch 3游戲與人工智能編程完全自學教程
- 你必須知道的204個Visual C++開發問題
- HTML5+CSS3+JavaScript Web開發案例教程(在線實訓版)
- Java EE 7 Performance Tuning and Optimization
- Go并發編程實戰
- 學習正則表達式
- 精通MATLAB(第3版)
- Instant PHP Web Scraping
- Azure Serverless Computing Cookbook