TheServer就是Tomcat自身,一個Tomcat程序?qū)嵗╥nstance)。它的一個重要屬性就是關(guān)閉Tomcat的端口號。“在一個給定的JVM中,只能創(chuàng)建一個Tomcat實例。“這句話是我從《Apache Tomcat6》這本書中看到的,但不是很理解。目前我的理解是這樣,
The Server對象是Server接口的一個實現(xiàn),一般常用的是StandardServer類的一個對象。
一個Server可以有多個Service,一般一個Server只有一個Service。一個Service包括一個Engine和多個Connector。
An Engine is a request-processing component that represents the Catalina Servlet engine. It examines
the HTTP headers to determine the virtual host or context to which requests should be passed.
上面這段話翻譯過來大概是這樣:
一個引擎是一個處理請求的組件,也就是Catalina Servlet引擎。它通過http request請求頭的信息來向相應(yīng)的virtual host或context轉(zhuǎn)發(fā)request。
由此可見,這里的Engine是一個概念,而不是某個具體的文件,凡是符合一定標準的組件都可以作為引擎。
每一個Service都是由一組Connector(處理服務(wù)器與客戶端之間交互的組件)與一個引擎組成的。引擎的作用是接受Connector傳過來的request并將他們轉(zhuǎn)發(fā)給相應(yīng)的host。
Tomcat中的service一般是實現(xiàn)了service接口的一個StandardService類的對象。
Connector是用戶請求到達服務(wù)器的第一站。每個connector都有一個端口號,常用的Connector有兩種,一種是HTTPConnector,另一種是AJPConnector,除此之外,還有一些其他類型的接口。如果要使用SSL,在配置文件里修改的也是Connector屬性。
我覺得這是tomcat中最重要的部分,雖然它并不是不可或缺的。Engine除了前面所說的處理并轉(zhuǎn)發(fā)request功能外,還可以提供java servlet服務(wù)。正是Engine實現(xiàn)了jsp到j(luò)ava文件的轉(zhuǎn)換。
Engine中的realm負責(zé)用戶驗證和授權(quán)。在一個web應(yīng)用程序中,管理員會創(chuàng)建一些有不同權(quán)限的roles,實現(xiàn)這個機制的正是Realm。Realm可以管理的文件包括文本文件,數(shù)據(jù)庫表格,LDAP 服務(wù)器等。
在不同的級別上都可以設(shè)置Realm,如Engine中的Realm就是頂層容器級的Realm,而各個Host,Context也可以有自己的Realm。
Valve是用來預(yù)處理用戶請求的,有些類似于servlet中的filter。
顧名思義,Logger是用來生成日志文件的。Engine級別的Logger 適用于全局,除非被某個host或context級別的logger所覆蓋。
Host在功能上與apache中的 virtual host類似,在Apache中virtualhost用來實現(xiàn)在一臺機器上安裝多個apacheserver,用他們的ip地址或主機名來區(qū)分。在tomcat中,多個Host是通過主機名來區(qū)分的,如www.examle.com與www.example.net就可以被區(qū)分。
Host是Engine的一個成員,在一個Engine中,可以有1個或多個host,包括一個默認的host和0個或多個虛擬的host。當engine無法確定將請求發(fā)給哪一個host時,就會將這個請求發(fā)給默認的那個host。
每個Context對應(yīng)一個web應(yīng)用程序,一個web應(yīng)用程序的配置包括通知Engine/Hostweb應(yīng)用程序的位置(rootfolder,還可以設(shè)置是否在發(fā)生改變時是否自動重載。不過自動重載會降低系統(tǒng)性能,因此建議僅在調(diào)試時使用這個選項。
還可以在Conetxt中設(shè)置errorpage,方便管理員檢查錯誤。默認情況下Context是實現(xiàn)Context接口的一個Standard類的Context對象。