1. 程式人生 > >Tomcat系統架構分析

Tomcat系統架構分析

3).  11. Server.xml

<Engine defaultHost="localhost" name="Catalina">

 

    <Valve className="org.apache.catalina.valves.RequestDumperValve"/>

    ………

    <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"

    xmlNamespaceAware="false" xmlValidation="false">

 

        <Valve className="org.apache.catalina.valves.FastCommonAccessLogValve"

            directory="logs"  prefix="localhost_access_log." suffix=".txt"

            pattern="common" resolveHosts="false"/>    

    …………

    </Host>

</Engine>

StandardEngineValve 和 StandardHostValve 是 Engine 和 Host 的預設的 Valve,它們是最後一個 Valve 負責將請求傳給它們的子容器,以繼續往下執行。

前面是 Engine 和 Host 容器的請求過程,下面看 Context 和 Wrapper 容器時如何處理請求的。下面是處理請求的時序圖:

4).  Context 和 wrapper 的處理請求時序圖

從 Tomcat5 開始,子容器的路由放在了 request 中,request 中儲存了當前請求正在處理的 Host、Context 和 wrapper。

    1. Engine 容器

Engine 容器比較簡單,它只定義了一些基本的關聯關係,介面類圖如下:

1). Engine 介面的類結構

它的標準實現類是 StandardEngine,這個類注意一點就是 Engine 沒有父容器了,如果呼叫 setParent 方法時將會報錯。新增子容器也只能是 Host 型別的,程式碼如下:

  1. StandardEngine. addChild

public void addChild(Container child) {

    if (!(child instanceof Host))

        throw new IllegalArgumentException

            (sm.getString("standardEngine.notHost"));

    super.addChild(child);

}

 

public void setParent(Container container) {

    throw new IllegalArgumentException

        (sm.getString("standardEngine.notParent"));

}

它的初始化方法也就是初始化和它相關聯的元件,以及一些事件的監聽。

 

 

 

本教程由尚矽谷教育大資料研究院出品,如需轉載請註明來源。