深入剖析Tomcat(How Tomcat Works)


 

 

 

《深入剖析Tomcat》前言(作者:Budi Kurniawan & Paul Deck)

歡迎閱讀本書。本書剖析了Tomcat 4.1.12版本和Tomcat 5.0.18版本的基本結構,並解釋了其servlet容器Catalina的內部工作原理。Catalina是開源、免費的,也是最受歡迎的servlet容器之一。Tomcat本身是一個復雜的系統,包含了許多不同的組件。若你想學習Tomcat的工作方式,應該從了解這些組件開始。本書描述Tomcat的總體結構,並針對每個組件建立一個簡單的版本,使你更好地理解組件的工作機制,之后對真實組件進行描述。

“本書結構”一節會對全書的章節設置做一個總體介紹,並說明構建的應用程序的總體結構。在“准備必需的軟件”一節,說明需要下載使用哪些軟件,如何為代碼創建目錄結構等。

本書讀者對象

本書適合於所有使用Java技術工作的開發人員。

  • 如果你是一名JSP/Servlet程序員或Tomcat用戶,並想了解servlet容器是如何工作的,那么本書很適合你;
  • 如果你想加入Tomcat開發團隊,那么本書很適合你,因為你首先要學習已有的代碼是如何工作的;
  • 如果你不是一名Web開發人員,但對軟件開發很有興趣,那么你可以從本書中學習到一個大型應用軟件(如Tomcat)是如何設計和開發的;
  • 如果你想對Tomcat進行配置或定制,你應該閱讀本書。

為了更好地理解本書所講述的內容,你需要理解Java中的面向對象編程知識,以及Servlet編程方面的知識。如果你對后者還不熟悉,那么你學習起來可能會有些困難。你可以先學習一下Servlet編程方面的知識,例如看一下Budi的《Java for the Web with Servlets, JSP, and EJB》一書。為了使你更好地理解本書的內容,每一章的開頭都會有一段與該章內容相關的背景信息的介紹。

servlet容器是如何工作的

servlet容器是一個復雜的系統,但是,它有3個基本任務,對每個請求,servlet容器會為其完成以下3個操作:

創建一個request對象,用可能會在調用的Servlet中使用到的信息填充該request對象,如參數、頭、cookie、查詢字符串、URI等。reqeust對象是javax.servlet.ServletRequest接口或javax.servlet.http.ServletRequest接口的一個實例。

創建一個調用Servlet的response對象,用來向Web客戶端發送響應。 response對象是javax.servlet.ServletResponse接口或javax.servlet.http.ServletResponse接口的一個實例;

調用Servlet的service()方法,將request對象和response對象作為參數傳入。Servlet從request對象中讀取信息,並通過response對象發送響應信息。

當你閱讀具體的章節時,你會看到關於servlet容器Catalina的詳細描述。

Catalina框圖

Catalina是一個成熟的軟件,設計和開發得十分優雅,功能結構也是模塊化的。上一節“servlet容器是如何工作的”中提到了servlet容器的任務,基於這些任務可以將Catalina划分為兩個模塊:連接器(connector)和容器(container)。

圖I-1很簡單,在后續的章節中,你會逐個接觸到所有的組件。

 

圖I-1  Catalina的主要模塊

現在,回到圖I-1,這里的連接器負責將一個請求與容器相關聯。它的工作包括為它接收到的每個HTTP請求創建一個request對象和一個response對象。然后,它將處理過程交給容器。容器從連接器中接收到request對象和response對象,並負責調用相應的Servlet的service()方法。

但是請記住,上面所描述的處理過程只是Catalina容器處理請求的整個過程的一小部分,猶如冰山的一角,在容器中還包括很多其他的事情要做。例如,在容器調用相應的Servlet的service()方法之前,它必須先載入該Servlet類,對用戶進行身份驗證(如果有必要的話),為用戶更新會話信息等。因此,當你發現容器使用了很多不同的模塊來處理這些事情時,請不要太驚訝。例如,管理器模塊用來處理用戶會話信息,載入器模塊用來載入所需的Servlet類等。

Tomcat 4和Tomcat 5

本書涵蓋了Tomcat 4和Tomcat 5兩個版本。下面是這兩個版本的一些區別之處:

  • Tomcat 5支持Servlet 2.4和JSP 2.0規范,Tomcat 4支持Servlet 2.3和JSP 1.2規范;
  • Tomcat 5默認的連接器比Tomcat 4默認的連接器執行效率更高;
  • Tomcat 5使用共享線程來執行后台任務,而Tomcat 4的組件使用各自的線程執行后台任務,因此,相比於Tomcat 4,Tomcat 5更節省資源;
  • Tomcat 5不再使用映射器組件來查找子組件,因此,代碼更簡單。

本書結構

本書共20章,前兩章概述了全書內容。第1章介紹了HTTP服務器是如何工作的,第2章介紹了一個簡單的servlet容器。第3章和第4章着重於連接器的說明,第5~20章介紹容器中的各個組件。下面是每一章的內容簡介。

注意 每一章都配有一個應用程序用於對該章所介紹組件進行實際應用的說明。

第1章:本書從介紹一個簡單的HTTP服務器開始。為了建立一個可以運行的HTTP服務器,你需要了解java.net包下Socket類和ServerSocket類的內部運行機制。該章有詳細的背景信息介紹,使你可以理解該章中應用程序的運行機制。

第2章:闡明一個簡單的servlet容器是如何工作的。該章有兩個與servlet容器有關的應用程序,可以服務於靜態資源的請求和簡單Servlet的請求。此外,你會學習到如何創建request對象和response對象,並將它們傳遞給被請求的Servlet的service()方法。此外,在該servlet容器中有一個可以運行的Servlet,可以從Web瀏覽器中進行調用。

第3章:將對Tomcat 4中的默認連接器的精簡版進行說明。該章中建立的應用程序可以作為一個學習工具,有助於理解在第4章中討論的連接器。

第4章:對Tomcat 4的默認連接器進行說明。該連接器已經棄用,而是推薦使用另一個稱為Coyote的執行速度更快的連接器。但是,原先的默認連接器更簡單、更容易理解。

第5章:討論容器模塊。容器由org.apache.catalina.Container接口表示,共有4種類型的容器,分別是Engine、Host、Context和Wrapper。該章提供了兩個分別與Context和Wrapper相關的應用程序。

第6章:對Lifecycle接口進行說明。該接口定義了Catalina組件的生命周期,並提供了一種優雅的方法來通知其他組件在該組件中發生了某種事件。此外,Lifecycle接口提供了一種優雅的機制來啟動和關閉Catalina中所有的組件,只需要啟動/關閉一次即可。

第7章:介紹日志記錄器組件,該組件用於記錄錯誤消息和其他的相關消息。

第8章:對載入器組件進行介紹,載入器是Catalina中的重要模塊,負責載入Servlet和Web應用程序中所需要的其他類。該章還將說明Web應用程序的重載是如何實現的。

第9章:介紹管理器組件。該組件負責在會話管理中管理會話。該章介紹了幾種不同類型的管理器,並說明了管理器組件是如何持久化一個session對象的。在該章末尾,介紹如何使用StandardManager實例構建一個使用session對象保存數據的應用程序。

第10章:該章將討論Web應用程序的安全限制,以限制對某些內容的訪問。你會學習到一些與安全相關的實體,如主體、角色、登錄配置和身份驗證等。該章有兩個應用程序,分別在StandardContext對象中安裝了驗證器閥,並使用基本驗證來對用戶進行身份驗證。

第11章:對org.apache.catalina.core.StandardWrapper類進行了詳細闡述,該類表示Web應用程序中的一個Servlet對象。該章還說明了過濾器和Servlet的service()方法是如何調用的。該章的應用程序使用StandardWrapper實例來表示實際的Servlet對象。

第12章:介紹org.apache.catalina.core.StandardContext類,該類表示一個Web應用程序。該章還說明了如何對一個StandardContext對象進行配置(這是在接收到HTTP請求時進行的)、如何支持Web應用程序的自動重載,以及Tomcat 5如何通過一個共享線程來執行其相關聯組件中的周期性任務。

第13章:對另外兩種容器(Host和Engine)進行說明。該章對這兩種容器的標准實現org.apache.catalina.core.StandardHost和org.apache.catalina.core.StandardEngine進行了說明。

第14章:對服務器組件和服務組件進行介紹。服務器組件提供了一種優雅的機制來啟動或關閉整個servlet容器,服務組件可作為一個容器和一個或多個連接器的持有者。該章通過應用程序來說明如何使用服務器組件和服務組件。

第15章:說明如何通過Digester組件來對Web應用程序進行配置。Digester是Apache軟件基金會的一個開源項目。即使你對這個不熟悉也沒有關系,該章會簡要介紹Digester庫,說明如何使用該庫來將XML文檔中的節點轉換為Java對象。該章然后說明Tomcat是如何通過ContextConfig對象來對StandardContext對象進行配置的。

第16章:對Tomcat中的關閉鈎子進行說明。不論用戶如何關閉Tomcat(即通過發送關閉命令,或是突然直接關閉控制台),通過使用關閉鈎子,Tomcat總是可以執行一些清理工作。

第17章:對使用批處理文件和Shell腳本來啟動和關閉Tomcat進行說明。

第18章:對部署器組件進行說明,該組件負責部署和安裝Web應用程序。

第19章:對一個特殊接口(ContainerServlet)進行說明。使用該接口,Servlet對象可以訪問Catalina中的內部對象。此外,該章會對用來管理已部署應用程序的Manager應用程序進行說明。

第20章:對JMX進行說明,並闡述Tomcat是如何為其內部對象創建MBean,並使這些內部對象可托管的。

每一章的應用程序

每一章都會有一個或多個應用程序用來解釋Catalina中的某個特定組件的使用方法。一般情況下,在該應用程序中你會找到該組件的精簡版,或是為說明如何使用Catalina組件而編寫的代碼。在每一章的應用程序中編寫的所有的類和接口都在ex[章號].pyrmont包下。例如,第1章的應用程序類會在ex01.pyrmont包下。

准備必需的軟件

本書的應用程序會運行在J2SE的1.4版本下。源文件的壓縮包可以從作者的網站www.brainysoftware.com上下載。該壓縮包包含了Tomcat 4.1.12的源代碼,以及本書中的應用程序的代碼。假設你已經安裝了J2SE的1.4版本,而且環境變量path也已經包含了JDK的路徑,那么只需執行下面的步驟。

1)解壓縮zip文件。解壓縮后會有一個名為HowTomcatWorks的新文件夾。HowTomcatWorks是工作目錄,其下有一些子目錄,包括lib(包含所有必需的庫文件)、src(包含所有源文件)、webroot(包含一個HTML文件和三個Servlet示例文件)和webapps(包含示例應用程序);

2)進入到工作目錄中,編譯Java文件。若你使用Windows操作系統,則運行win-compile.bat批處理文件。若你使用Linux操作系統,則執行下面的命令(必要時,不要忘記用chmod命令修改文件的執行權限):

./linux-compile.sh

注意 更多的信息可以在壓縮包的Readme.txt文件中找到。


【內容簡介】

《深入剖析Tomcat》(How Tomcat Works)深入剖析Tomcat 4和Tomcat 5中的每個組件,並揭示其內部工作原理。通過學習本書,你將可以自行開發Tomcat組件,或者擴展已有的組件。

本書主要內容:

  • 如何開發Java Web服務器。
  • Tomcat是否會為每個servlet類創建多個實例。
  • Tomcat如何運行一個實現SimpleThreadModel接口的servlet類。
  • servlet容器的兩個主要模塊:連接器和servlet容器。
  • 如何構建或者擴展已有的連接器。
  • 4種servlet容器:Engine、Host、Context和Wrapper。
  • Tomcat如何管理Session,以及如何在分布式環境下擴展Session管理器。
  • Tomcat中的類載入器和如何創建自定義載入器。
  • Tomcat如何實現安全性和基本/基於表單/摘要的身份驗證。
  • Tomcat中的領域與登錄配置是如何工作的。
  • Tomcat如何處理配制文件(server.xml),以及如何通過Digester庫將XML元素轉換為Java對象。
  • Tomcat中的關閉鈎子。
  • JMX、Apache的 Commons Modeler和Tomcat中的JMX托管資源。

了解本書更多信息,請點擊【互動網】【卓越網】【豆瓣網

 

【作者簡介】

Budi Kurniawan是《Java for Web With Servlets, JSP and EJB》的作者,同時也是一位IT咨詢師,主要研究方向包括互聯網與面向對象程序設計。除了其他一些計算機圖書,他已經在10多種出版物上發表了約100篇文章,其中包括一些享有盛譽的Java雜志,如《Java.net》、《JavaPro》、《JavaWorld》等。Budi也是Brainysoftware.com的應用程序File Upload Bean的作者,在世界范圍內很多公司都獲得授權並使用該應用程序。

Paul Deck是一個有15多年經驗的IT架構師,參與了很多項目的開發,這些項目遍布在美國、加拿大、中國和澳大利亞。他喜歡旅行,對網絡、互聯網編程、設計模式和用戶界面交互設計非常感興趣。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM