Tomcat啟動和請求處理解析

2022-09-13 15:54:13 字數 1569 閱讀 3552

tomcat是我們經常使用的元件,但是內部是如何執行的呢,我們去一**竟。

tomcat的整體架構圖如下:

tomcat中只有乙個server,乙個server可以有多個service,乙個service可以有多個connector和乙個container;server掌管著整個tomcat的生死大權;service 是對外提供服務的;connector用於接受請求並將請求封裝成request和response來具體處理;container用於封裝和管理servlet,以及具體處理request請求;

connector架構:

container架構:

整體關係圖:

首先tomcat啟動是從startup.sh或者startup.bat指令碼啟動,實際是去執行catalina.sh指令碼,如下圖所示:

catalina.sh中再執行bootstrap的main方法

catalina通過呼叫lifecyclebase的initinternal方法啟動server、service、container,依次啟動

而host、context是繼承container,container通過啟動child方法來啟動這些元件

server.xml檔案裡host節點預設是沒有值的,所以也就取不到子元素了,那麼上下文是怎麼執行的呢?

通過設定狀態,hostconfig監聽到,呼叫deploydirectories方法。由於context是null,通過反射建立context,

之後呼叫context.startinternal獲取web.xml,讀取web.xml中的loadonstartup載入servlet,執行servlet的init()

整個請求傳遞是通過管道鏈來實現的,請求呼叫的方法如下圖

tomcat解析 十九 對客戶請求的處理3

下面是standardcontextvalve的invoke方法內容 1 對於路徑中直接訪問meta inf或web inf目錄下資源的,直接返回404錯誤 可以看到在最後的filter再執行filterchain.dofilter的時候將會執行請求對應的servlet類的service方法,這也是...

TOMCAT 請求引數亂碼處理

通常,在使用spring mvc框架的應用程式中,為了解決中文引數亂碼的問題,都會新增如下過濾器配置 encodingfilter org.springframework.web.filter.characterencodingfilter encoding utf 8 forceencoding ...

一 Tomcat處理請求過程

tomcat通過endpoint元件接收socket連線,接收到乙個socket連線後會執行如下步驟 1.第一次從socket中獲取資料inputbuffer中,bio對應的是internalinputbuffer,父類是abstractinputbuffer 2.然後基於inputbuffer進行...