Tomcat 服務器是一個免費的開放源代碼的Web 應用服務器,Tomcat是Apache 軟件基金會(Apache Software Foundation)的Jakarta 項目中的一個核心項目,它早期的名稱爲catalina,後來由Apache、Sun 和其餘一些公司及我的共同開發而成,並改名爲Tomcat。Tomcat 是一個小型的輕量級應用服務器,在中小型系統和併發訪問用戶不是不少的場合下被廣泛使用,是開發和調試JSP 程序的首選,由於Tomcat 技術先進、性能穩定,成爲目前比較流行的Web 應用服務器。Tomcat是應用(java)服務器,它只是一個servlet容器,是Apache的擴展,但它是獨立運行的。html
最本質上講,tomcat爲一個jsp/servlet容器前端
Server:表示一個Tomcat實例 (單例的);Server表明整個catalina servlet容器;包含一個或多個service子容器。主要是用來管理容器下各個Serivce組件的生命週期。java
Service:表明Tomcat中一組提供服務、處理請求的組件。是一個分組結構,包括多個Connector和一個Container。
web
Connector是客戶端鏈接到Tomcat容器的服務點,它爲引擎提供協議服務來將引擎與客戶端各類協議隔離開來,如HTTP、HTTPS、AJP協議。Connector的基本屬性都是它所須要監聽的IP地址及端口號,以及所支持的協議。還有一個關鍵屬性就是併發處理傳入請求的最大線程數。注意,Connector關鍵的有 鏈接器(HTTP HTTPS HTTP1.1 AJP SSL proxy) 運行模式(BIO NIO NIO2/AIO APR)多線程/線程池面試
一個Connecter將在某個指定的端口上偵聽客戶請求,接收瀏覽器的發過來的 tcp 鏈接請求,建立一個 Request 和 Response 對象分別用於和請求端交換數據,而後會產生一個線程來處理這個請求並把產生的 Request 和 Response 對象傳給處理Engine(Container中的一部分),從Engine出得到響應並返回客戶。數據庫
Container是容器的父接口,用於封裝和管理Servlet,以及具體處理Request請求,該容器的設計用的是典型的責任鏈的設計模式,它由四個自容器組件構成,分別是Engine、Host、Context、Wrapper。這四個組件是負責關係,存在包含關係。只包含一個引擎。設計模式
Engine 引擎:表示可運行的Catalina的servlet引擎實例,而且包含了servlet容器的核心功能。在一個服務中只能有一個引擎。同時,做爲一個真正的容器,Engine元素之下能夠包含一個或多個虛擬主機。它主要功能是將傳入請求委託給適當的虛擬主機處理。若是根據名稱沒有找到可處理的虛擬主機,那麼將根據默認的Host來判斷該由哪一個虛擬主機處理。瀏覽器
Host 虛擬主機:做用就是運行多個應用,它負責安裝和展開這些應用,而且標識這個應用以便可以區分它們。它的子容器一般是 Context。一個虛擬主機下均可以部署一個或者多個Web App,每一個Web App對應於一個Context,當Host得到一個請求時,將把該請求匹配到某個Context上,而後把該請求交給該Context來處理。主機組件相似於Apache中的虛擬主機,但在Tomcat中只支持基於FQDN(徹底合格的主機名)的「虛擬主機」。Host主要用來解析web.xml。tomcat
Context上下文:表明 Servlet 的 Context,它具有了 Servlet 運行的基本環境,它表示Web應用程序自己。Context 最重要的功能就是管理它裏面的 Servlet 實例,一個Context對應於一個Web Application,一個Web Application由一個或者多個Servlet實例組成。服務器
Wrapper包裝器: 表明一個 Servlet,它負責管理一個 Servlet,包括的 Servlet 的裝載、初始化、執行以及資源回收。Wrapper 是最底層的容器,它沒有子容器了,因此調用它的 addChild 將會報錯。
Valve閥門:相似於Servlet規範中定義的過濾器,用來攔截請求並在將其轉至目標以前進行某種處理操做。Valve能夠定義在任何容器類的組件中。Valve常被用來記錄客戶端請求、客戶端IP地址和服務器等信息,這種處理技術一般被稱做請求轉儲(request dumping)。請求轉儲valve記錄請求客戶端請求數據包中的HTTP首部信息和cookie信息文件中,響應轉儲valve則記錄響應數據包首部信息和cookie信息至文件中。
Logger日誌記錄器:用於記錄組件內部的狀態信息,可被用於除Context以外的任何容器中。日誌記錄的功能可被繼承,所以,一個引擎級別的Logger將會記錄引擎內部全部組件相關的信息,除非某內部組件定義了本身的Logger組件。
Loader類加載器:負責加載、解釋Java類編譯後的字節碼。
Realm領域:用於用戶的認證和受權;在配置一個應用程序時,管理員能夠爲每一個資源或資源組定義角色及權限,而這些訪問控制功能的生效須要經過Realm來實現。Realm的認證能夠基於文本文件、數據庫表、LDAP服務等來實現。Realm的效用會遍佈整個引擎或頂級容器,所以,一個容器內的全部應用程序將共享用戶資源。同時,Realm能夠被其所在組件的子組件繼承,也能夠被子組件中定義的Realm所覆蓋。
Excutor執行器:執行器組件容許您配置一個共享的線程池,以供您的鏈接器使用。從tomcat 6.0.11版本開始。
Listener監聽器:監聽已註冊組件的生命週期。
Manager會話管理器:用於實現http會話管理的功能,tomcat6種有5種會話管理的manager的實現(standardManager、persisentManager、DeltaManager、BackupManager、SimpleTcpReplicationManager)。會話讓使用無狀態HTTP協議的應用程序完成通訊。會話表示客戶端和服務器之間的通訊,會話功能是由javax.servlet.http.HttpSession 的實例實現的,該實例存儲在服務器上並且與一個惟一的標識符相關聯,客戶端在與服務器的每次交互中根據請求中的標識符找到它的會話。一個新的會話在客戶端請求後被建立,會話一直有效直到一段時間後客戶端鏈接超時,或者會話直接失效例如客戶退出訪問服務器。
Cluster集羣:專用於配置Tomcat集羣的元素,可用於Engine和Host容器中。
架構好處: 1. 便於組件生命週期的管理; 2. 簡化配置,容許子容器繼承父容器的配置。