歡迎閱讀《How Tomcat Works》這本書。這本書解剖了Tomcat4.1.12和5.0.18版本,解釋了它的servlet容器的內(nèi)部運(yùn)行機(jī)制,那是一個免費的,開源的,最受歡迎的servlet容器,代號為Catalina。Tomcat是一個復(fù)雜的系統(tǒng),由許多不同的組件構(gòu)成。那些想要學(xué)習(xí)Tomcat運(yùn)行機(jī)制的朋友大部分知道從何入手。這本書會提供一個藍(lán)圖,然后為每一個組件構(gòu)造一個簡化版本,使得可以更加容易的理解這些組件。在這之后才會對真實的組件進(jìn)行解釋。
你應(yīng)該從這份簡介開始閱讀,因為它解釋了這本書的結(jié)構(gòu),同時給你勾畫了這個項目構(gòu)造的簡潔輪廓!皽(zhǔn)備前提軟件”這一節(jié)會給你一些指示,例如你需要下載什么樣的軟件,如何為你的代碼創(chuàng)建目錄結(jié)構(gòu)等等。
本書為誰而作
這本書是為任何一個使用Java技術(shù)進(jìn)行工作的人而準(zhǔn)備的。
假如你是一個servlet/jsp程序員或者一個Tomcat用戶,而且對一個servlet容器是如何工作這個問題你感興趣的話,這本書就是為你準(zhǔn)備的。
假如你想加入Tomcat的開發(fā)團(tuán)隊的話,這本書就是為你準(zhǔn)備的,因為你首先需要學(xué)習(xí)那些已存在的代碼是如何工作的。
假如你從未涉及web開發(fā),但你對一般意義上的軟件開發(fā)感興趣的話,你可以在這本書學(xué)到一個像Tomcat一樣的大型項目是如何進(jìn)行設(shè)計和開發(fā)的。
假如你想配置和自定義Tomcat,你也應(yīng)該讀讀這本書。
為了理解書中的討論,你需要了解Java面向?qū)ο缶幊碳夹g(shù)以及servlet編程。假如你對這些不熟悉的話,這里有很多書籍可以參考,包括Budi的《Java for the Web with Servlets, JSP, and EJB》。為了讓這些材料更容易理解,每一章開始都會有便于理解所討論主題的必要的背景資料介紹。
Servlet容器是如何工作的
servlet容器是一個復(fù)雜的系統(tǒng)。不過,一個servlet容器要為一個servlet的請求提供服務(wù),基本上有三件事要做:
創(chuàng)建一個request對象并填充那些有可能被所引用的servlet使用的信息,如參數(shù)、頭部、cookies、查詢字符串、URI等等。一個request對象是javax.servlet.ServletRequest或javax.servlet.http.ServletRequest接口的一個實例。
創(chuàng)建一個response對象,所引用的servlet使用它來給客戶端發(fā)送響應(yīng)。一個response對象javax.servlet.ServletResponse或javax.servlet.http.ServletResponse接口的一個實例。
調(diào)用servlet的service方法,并傳入request和response對象。在這里servlet會從request對象取值,給response寫值。
當(dāng)你讀這些章節(jié)的時候,你將會找到關(guān)于catalina servlet容器的詳細(xì)討論。
Catalina架構(gòu)圖
Catalina是一個非常復(fù)雜的,并優(yōu)雅的設(shè)計開發(fā)出來的軟件,同時它也是模塊化的;凇癝ervlet容器是如何工作的”這一節(jié)中提到的任務(wù),你可以把Catalina看成是由兩個主要模塊所組成的:連接器(connector)和容器(container)。在Figure I.1中的架構(gòu)圖,當(dāng)然是簡化了。在稍后的章節(jié)里邊,你將會一個個的揭開所有更小的組件的神秘面紗。
現(xiàn)在重新回到Figure I.1,連接器是用來“連接”容器里邊的請求的。它的工作是為接收到每一個HTTP請求構(gòu)造一個request和response對象。然后它把流程傳遞給容器。容器從連接器接收到requset和response對象之后調(diào)用servlet的service方法用于響應(yīng)。謹(jǐn)記,這個描述僅僅是冰山一角而已。這里容器做了相當(dāng)多事情。例如,在它調(diào)用servlet的service方法之前,它必須加載這個servlet,驗證用戶(假如需要的話),更新用戶會話等等。一個容器為了處理這個進(jìn)程使用了很多不同的模塊,這也并不奇怪。例如,管理模塊是用來處理用戶會話,而加載器是用來加載servlet類等等。
Tomcat 4和5
這本書涵蓋了Tomcat4和5.這兩者有一些不同之處:
Tomcat 5支持Servlet 2.4和JSP 2.0規(guī)范,而Tomcat 4支持Servlet 2.3和JSP 1.2。
比起Tomcat 4,Tomcat 5有一些更有效率的默認(rèn)連接器。
Tomcat 5共享一個后臺處理線程,而Tomcat 4的組件都有屬于自己的后臺處理線程。因此,就這一點而言,Tomcat 5消耗較少的資源。
Tomcat 5并不需要一個映射組件(mapper component)用于查找子組件,因此簡化了代碼。