tomcat7 也開始支援嵌入式功能,增加了乙個啟動類org.apache.catalina.startup.tomcat。建立乙個例項物件並呼叫 start 方法就可以很容易啟動 tomcat,我們還可以通過這個物件來增加和修改 tomcat 的配置引數,如可以動態增加 context、servlet 等。下面我們就利用這個 tomcat 類來管理新增的乙個 context 容器,我們就選擇 tomcat7 自帶的 examples web 工程,並看看它是如何加到這個 context 容器中的。
接下去將會呼叫 tomcat 的 start 方法啟動 tomcat,如果你清楚 tomcat 的系統架構,你會容易理解 tomcat 的啟動邏輯,tomcat 的啟動邏輯是基於觀察者模式設計的,所有的容器都會繼承 lifecycle 介面,它管理者容器的整個生命週期,所有容器的的修改和狀態的改變都會由它去通知已經註冊的觀察者(listener),關於這個設計模式可以參考《 tomcat 的系統架構與設計模式,第二部分:設計模式》。
當 context 容器初始化狀態設為 init 時,新增在 contex 容器的 listener 將會被呼叫。contextconfig 繼承了 lifecyclelistener 介面,它是在呼叫清單 3 時被加入到 standardcontext 容器中。contextconfig 類會負責整個 web 應用的配置檔案的解析工作。contextconfig 的 init 方法將會主要完成以下工作:建立用於解析 xml 配置檔案的 contextdigester 物件讀取預設 context.xml 配置檔案,如果存在解析它讀取預設 host 配置檔案,如果存在解析它讀取預設 context 自身的配置檔案,如果存在解析它設定 context 的 docbasecontextconfig 的 init 方法完成後,context 容器的會執行 startinternal 方法,這個方法啟動邏輯比較複雜,主要包括如下幾個部分:建立讀取資源檔案的物件建立 classloader 物件設定應用的工作目錄啟動相關的輔助類如:logger、realm、resources 等修改啟動狀態,通知感興趣的觀察者(web 應用的配置)子容器的初始化獲取 servletcontext 並設定必要的引數初始化「load on startup」的 servlet。
Servlet工作原理解析
1 servlet容器 tomcat容器分四個等級,真正管理servlet的容器是context容器,乙個web應用對應乙個context容器,也就是servlet執行時的servlet容器。新增乙個web應用建立乙個standcontext容器,並且給這個context設定必要的引數,url和pa...
Servlet工作原理
首先簡單解釋一下servlet接收和響應客戶請求的過程,首先客戶傳送乙個請求,servlet是呼叫service 方法對請求進行響應的,通過源 可見,service 方法中對請求的方式進行了匹配,選擇呼叫doget,dopost等這些方法,然後再進入對應的方法中呼叫邏輯層的方法,實現對客戶的響應。在...
ping 命令工作原理詳細解析
ping的原理就是首先建立通道,然後傳送包,對方接受後返回資訊,這個包至少包括以下內容,傳送的時候,包的內容包括對方的ip位址和自己的位址,還有序列數,回送的時候包括雙方位址,還有時間等,主要是接受方在都是在作業系統核心裡做好的,時刻在監聽,提供一段c程式的 希望對大家有用。include incl...