1. 程式人生 > >第11章 Tomcat的系統架構與設計模式

第11章 Tomcat的系統架構與設計模式

必須 ket 聲明 命令模式 基本 ner 虛擬主機 fec 啟動

11.1 Tomcat總體設計

  11.1.1 Tomcat總體架構

  Tomcat和核心有連個組件:Connector和Container,Connector是可以被替換的。一個container可以有多個connector,多個connector和一個container形成一個service,service的生存環境就是server。所以Tomcat的聲明周期由Server控制。

    1. 以Service作為“婚姻”

    Connector負責對外交流,container主要處理connector接受的請求,主要處理內部事務。Service將兩者組合到一起。Service只是在Connector和Container外面包一層,向外提供服務。一個Service可以設置多個Connector,但是只能有一個Connector容器。

   Tomcat中service接口的標準實現類是StandardService,它不僅實現了Service接口,同時實現了Lifecycle接口。

    2. 以Server為“居”

    提供接口讓其他程序能訪問這個Service集合,同時維護它包含的所有Service生命周期,包括如何初始化,如何結束服務 如何找別人要訪問的service。

    server的標準實現類StandardServer實現了先關方法。

    3. 組件的生命“Lifecycle”

    Tomcat中組件的生命周期通過Lifecycle接口控制,組件只要繼承這個接口,並實現其中的方法就可以統一被擁有它的組件控制了。這樣一層一層的,直到最高級的組件就可以控制Tomcat中酥油組件的生命周期了,這個最高組件就是Server,而控制server的是StartUP,也就是啟動和關閉Tomcat

    Server啟動時,下面的services都啟動;stop時,所有的services都stop

  11.1.2 Connector組件

  Connector組件是Tomcat中的兩個核心組件之一。主要任務是負責監聽瀏覽器發過來的TCP連接請求,創建一個Request和Response對象分別用於和請求端交換數據。然後會產生一個線程來處理這個請求並把產生的Request和Response對象傳遞給處理這個請求的線程。處理這個請求的線程就是Container組件要做的事了。

  當Connector將Socket連接封裝成Request和Respone對象後,接下來的事交給Container來處理。

  11.1.3 Servlet容器Container

  Container是容器的父接口,所有的子容器都必須實現這個接口,Container容器的設計用的是典型的責任鏈的設計模式,它由4個子容器組件構成,分別是Engine, Host, Context和Wrapper,這4個組件不是平行的,而是父子關系,Engine包含Host,Host包含Context,Context包含Wrapper。通常是一個Servlet class對應一個Wrapper,如果多個Servlet可以定義多個Wrapper;如果有多個Wrapper,則要定義一個更高級別的Container,如Context,Context通常對應下面的配置:

 <Context path="/library" docBase="D:/proects\library\deploy\target\library.war" reloadable=true>

    1. 容器的總體設計

    Context還可以定義在父容器Host中,Host不是必須的,但是要運行war程序,就必須用Host,因為在war中必有web.xml文件,這個文件的解析需要Host。如果有多個HOSt,就需要定義Engine了。Engine就是一個完整的Servlet引擎。

    2. Engine容器

    標準實現類是StandardEngine,添加子容器只能是Host類型。

    3. Host容器

    Host是engine的子容器,一個Host代碼一個虛擬主機,這個主機的作用就是運行多個應用,它負責安裝和展開這些應用,

    4. Context容器

    Context代表Servlet的Context,它具備了Servlet運行的基本環境,理論上只要要Context就可以運行Servlet了,簡單的Tomcat可以沒有Engine和Host。

    Context最重要的功能是管理它裏面的Servlet實例,Servlet實例在Context中是以Wrapper出現的。

    Context的配置文件有個reloadable屬性,為true時,war被修改後Tomcat會自動重新加載這個應用。

    5. Wrapper容器  

    Wrapper代表一個Servlet,它負責管理一個Servlet,包括Servlet的裝載、初始化、執行及資源回收。

    實現類是StandardWrapper,還實現了一個Servlet初始化信息的ServletConfig。

    它基本描述了對Servlet的操作,裝載了Servlet後就會調用Servlet的init方法。

    當Servlet被初始化完成後,就等著StandardWrapperValue去調用它的service方法了,調用Service方法之前要調用Servlet所有的的filter。

  11.1.4 Tomcat中的其他組件

    安全組件security, 日誌組件logger, session, mbeans,naming等。這些組件共同為Connector和Container提供必要的服務。

11.2 Tomcat中的設計模式

  11.2.1 門面設計模式

    1. 門面設計模式的原理

    2. Tomcat的門面設計模式示例

  11.2.2 觀察者設計模式

    1. 觀察者模式的原理

    2. Tomcat的觀察者模式示例

  11.2.3 命令設計模式

    1. 命令模式的原理

    2. Tomcat中命令模式的示例

  11.2.4 責任鏈設計模式

    1. 責任鏈模式的原理

    2. Tomcat中的責任鏈模式示例

11.3 總結

第11章 Tomcat的系統架構與設計模式