1. 程式人生 > >Servlet容器的啟動過程。

Servlet容器的啟動過程。

Tomcat的啟動邏輯是基於觀察者模式設計的,所有的容器都會繼承Lifecycle介面,他管理著容器的整個生命週期,所有容器的修改和狀態的改變都會由他去通知已經註冊的觀察者(Listener)。Tomcat啟動的時序圖如下圖所示。

上圖描述了在Tomcat的啟動過程中主要類之間的時序關係,下面我們將會重點關注新增examples應用所對應的StandardContext容器的啟動過程。

當Context容器初始化狀態設為init時,新增到Context容器的Listener將會被呼叫。ContextConfig繼承了LifecycleListener介面,他是在呼叫Tomcat.addWebapp時被加入到StandardContext容器中的。ContextConfig類會負責整個Web應用的配置檔案的解析工作。

ContextConfig的init方法將會主要完成以下工作。

  •     建立用於解析XML配置檔案的contextDigester物件。
  •     讀取預設的context.xml配置檔案,如果存在則解析它。
  •     讀取預設的Host配置檔案,如果存在則解析他。
  •     讀取預設的Context自身的配置檔案,如果存在則解析他。
  •     設定Context的DocBase。

ContextConfig的init方法完成後,Context容器就會執行startInternal方法,這個方法的啟動邏輯比較複雜,主要包括如下幾部分。

  •     建立讀取資原始檔的物件。
  •     建立ClassLoader物件。
  •     設定應用的工作目錄。
  •     啟動相關的輔助類,如logger、realm、resources等。
  •     修改啟動狀態,通知感興趣的觀察者(Web應用的配置)。
  •     子容器的初始化。
  •     獲取ServletContext並設定必要的引數。
  •     初始化“load on startup”的Servlet。