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。
-
- Engine 容器
Engine 容器比較簡單,它只定義了一些基本的關聯關係,介面類圖如下:
1). Engine 介面的類結構
它的標準實現類是 StandardEngine,這個類注意一點就是 Engine 沒有父容器了,如果呼叫 setParent 方法時將會報錯。新增子容器也只能是 Host 型別的,程式碼如下:
- 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"));
}
它的初始化方法也就是初始化和它相關聯的元件,以及一些事件的監聽。
本教程由尚矽谷教育大資料研究院出品,如需轉載請註明來源。