更新時間:2020-12-01 17:47:18 來源:動力節(jié)點 瀏覽1680次
Tomcat是一個世界上廣泛使用的支持jsp和servlets的Web服務(wù)器,作為一個免費的開放源代碼的Web 應(yīng)用服務(wù)器,Tomcat仍擁有穩(wěn)定的性能和先進(jìn)的技術(shù),這離不開Tomcat合理的體系結(jié)構(gòu)。本文我們就來解析一下Tomcat體系結(jié)構(gòu)。
目前,Tomcat服務(wù)器支持Servlet 2.5和JSP 2.1的規(guī)范,Tomcat服務(wù)器本身是由一組嵌套的層次和組件組成,一般可分為以下4類,分別為頂級組件,連接器類組件,容器類組件 被嵌套類(nested)組件,下面一起來了解這些組件,從而進(jìn)一步理解Tomcat體系結(jié)構(gòu)。
1.頂級組件
頂級組件:位于配置層次的頂級,并且彼此間有著嚴(yán)格的對應(yīng)關(guān)系(如,Server、Service);
(1).服務(wù)器(server):Tomcat的一個實例,通常一個JVM只能包含一個Tomcat實例;因此,一臺物理服務(wù)器上可以在啟動多個JVM的情況下在每一個JVM中啟動一個Tomcat實例,每個實例分屬于一個獨立的管理端口。這是一個頂級組件。
(2).服務(wù)(service):一個服務(wù)組件通常包含一個引擎和與此引擎相關(guān)聯(lián)的一個或多個連接器。給服務(wù)命名可以方便管理員在日志文件中識別不同服務(wù)產(chǎn)生的日志。一個server可以包含多個service組件,但通常情下只為一個service指派一個server。
2.連接器類組件
連接器:連接客戶端(可以是瀏覽器或Web服務(wù)器)請求至Servlet容器;
連接器(connectors):負(fù)責(zé)連接客戶端(可以是瀏覽器或Web服務(wù)器)請求至Servlet容器內(nèi)的Web應(yīng)用程序,通常指的是接收客戶發(fā)來請求的位置及服務(wù)器端分配的端口。默認(rèn)端口通常是HTTP協(xié)議的8080,管理員也可以根據(jù)自己的需要改變此端口。一個引擎可以配置多個連接器,但這些連接器必須使用不同的端口。默認(rèn)的連接器是基于HTTP/1.1的Coyote。同時,Tomcat也支持AJP、JServ和JK2連接器。
3.容器類組件容器:包含一組其它組件,如Engine、Host、Content;
(1).Engine:引擎通是指處理請求的Servlet引擎組件,即Catalina Servlet引擎,它檢查每一個請求的HTTP首部信息以辨別此請求應(yīng)該發(fā)往哪個host或context,并將請求處理后的結(jié)果返回的相應(yīng)的客戶端。嚴(yán)格意義上來說,容器不必非得通過引擎來實現(xiàn),它也可以是只是一個容器。如果Tomcat被配置成為獨立服務(wù)器,默認(rèn)引擎就是已經(jīng)定義好的引擎。而如果Tomcat被配置為Apache Web服務(wù)器的提供Servlet功能的后端,默認(rèn)引擎將被忽略,因為Web服務(wù)器自身就能確定將用戶請求發(fā)往何處。一個引擎可以包含多個host組件。
(2).Host:主機組件類似于Apache中的虛擬主機,但在Tomcat中只支持基于FQDN的“虛擬主機”。一個引擎至少要包含一個主機組件。
(3).Context:Context組件是最內(nèi)層次的組件,它表示W(wǎng)eb應(yīng)用程序本身。配置一個Context最主要的是指定Web應(yīng)用程序的根目錄,以便Servlet容器能夠?qū)⒂脩粽埱蟀l(fā)往正確的位置。Context組件也可包含自定義的錯誤頁,以實現(xiàn)在用戶訪問發(fā)生錯誤時提供友好的提示信息。
4.被嵌套類(nested)組件
被嵌套的組件:位于一個容器當(dāng)中,但不能包含其它組件(如,Realm(用戶賬戶數(shù)據(jù)庫)、valve(基于用戶的認(rèn)證)、logger(記錄日志));
這類組件通常包含于容器類組件中以提供具有管理功能的服務(wù),它們不能包含其它組件,但有些卻可以由不同層次的容器各自配置。
(1) .閥門(Valve):用來攔截請求并在將其轉(zhuǎn)至目標(biāo)之前進(jìn)行某種處理操作,類似于Servlet規(guī)范中定義的過濾器。Valve可以定義在任何容器類的組件中。Valve常被用來記錄客戶端請求、客戶端IP地址和服務(wù)器等信息,這種處理技術(shù)通常被稱作請求轉(zhuǎn)儲(request dumping)。請求轉(zhuǎn)儲valve記錄請求客戶端請求數(shù)據(jù)包中的HTTP首部信息和cookie信息文件中,響應(yīng)轉(zhuǎn)儲valve則記錄響應(yīng)數(shù)據(jù)包首部信息和cookie信息至文件中。
(2) .日志記錄器(Logger):用于記錄組件內(nèi)部的狀態(tài)信息,可被用于除Context之外的任何容器中。日志記錄的功能可被繼承,因此,一個引擎級別的Logger將會記錄引擎內(nèi)部所有組件相關(guān)的信息,除非某內(nèi)部組件定義了自己的Logger組件。
(3) .領(lǐng)域(Realm):用于用戶的認(rèn)證和授權(quán);在配置一個應(yīng)用程序時,管理員可以為每個資源或資源組定義角色及權(quán)限,而這些訪問控制功能的生效需要通過Realm來實現(xiàn)。Realm的認(rèn)證可以基于文本文件、數(shù)據(jù)庫表、LDAP服務(wù)等來實現(xiàn)。Realm的效用會遍及整個引擎或頂級容器,因此,一個容器內(nèi)的所有應(yīng)用程序?qū)⒐蚕碛脩糍Y源。同時,Realm可以被其所在組件的子組件繼承,也可以被子組件中定義的Realm所覆蓋。
以上就是Tomcat體系結(jié)構(gòu),總體來看Tomcat體系結(jié)構(gòu)并不復(fù)雜。那么,這么簡單的體系結(jié)構(gòu)是怎么發(fā)揮其作用達(dá)到Tomcat服務(wù)器的整體應(yīng)用效果的呢?想要知曉答案的小伙伴請移步到本站的Tomcat服務(wù)器教程。