Tomcat 原始碼分析

2021-10-20 06:01:42 字數 2189 閱讀 7772

server 伺服器的意思,代表整個 tomcat 伺服器,乙個 tomcat 只有乙個 server

server 中包含至少乙個 service 元件,用於提供具體服務。這個在配置檔案中也得到很好的體現(port=「8005」 shutdown="shutdown"是在 8005 埠監聽到"shutdown"命令,伺服器就會停止)

service 中的乙個邏輯功能層, 乙個 server 可以包含多個 service

service 接收客戶端的請求,然後解析請求,完成相應的業務邏輯,然後把處理後的結果返回給客戶端,一般會提供兩個方法,乙個 start 開啟服務 socket 連線,監聽服務埠,乙個 stop 停止服務釋放網路資源。

稱作聯結器,是 service 的核心元件之一,乙個 service 可以有多個 connector,主要是連線客戶端請求,用於接受請求並將請求封裝成 request 和 response,然後交給 container 進行處理,container 處理完之後在交給 connector 返回給客戶端。

乙個 service 中有多個 connector 和乙個 engine,engine 表示整個 servlet 引擎,乙個engine 下面可以包含乙個或者多個 host,即乙個 tomcat 例項可以配置多個虛擬主機,預設

的情況下 conf/server.xml 配置檔案中定義了乙個名為 catalina 的 engine。

乙個 engine 包含多個 host 的設計,使得乙個伺服器例項可以承擔多個網域名稱的服務

代表乙個站點,也可以叫虛擬主機,乙個 host 可以配置多個 context,在 server.xml 檔案 中 的 默 認 配 置 為

tomcat 的啟動流程很標準化,入口是 bootstrap,統一按照生命週期管理介面 lifecycle的定義進行啟動。首先,呼叫 init()方法逐級初始化,接著呼叫 start()方法進行啟動,同時,每次呼叫伴隨著生命週期狀態變更事件的觸發。

1、解析 startup.bat

最終定位執行catalina.bat

2、解析 catalina.bat

set "classpath=%classpath%%catalina_home%\bin\bootstrap.jar"

set mainclass=org.apache.catalina.startup.bootstrap

setaction=start

main 方法是整個 tomcat 啟動時的入口。在 main 方法中,使用 bootstrap.init()來初始化類載入器和建立 catalina 例項,然後再啟動 catalina 執行緒

用 於 初 始 化 容 器 相 關 , 首 先 創 建 類 加 載 器 , 然 後 通 過 反 射 創 建org.apache.catalina.startup.catalina 例項。

lifecycle 提供一種統一的管理物件生命週期的介面。通過 lifecycle、lifecyclelistener、lifecycleevent,catalina 實現了對 tomcat 各種元件、容器統一的啟動和停止的方式。

在 tomcat 服 務 開 啟 過 程 中 啟 動 的 一 些 列 組 件 、 容 器 , 都 實 現 了org.apache.catalina.lifecycle 這個介面,其中的 init()、start() 方法、stop() 方法,為其子類實

現了統一的 start 和 stop 管理

利用 digester 類解析 server.xml 檔案,得到容器的配置。

demon.start()方法會呼叫 catalina 的 start 方法

catalina 例項執行 start 方法。這裡有兩個點,乙個是 load()載入 server.xml 配置、初始化 server 的過程,乙個是 getserver().start()開啟服務、初始化並開啟一系列元件、子容器的過程

然後拿到 standardserver 例項呼叫 initialize()方法初始化 tomcat 容器的一系列元件。一些容器初始化的的時候,都會呼叫其子容器的 initialize()方法,初始化它的子容器。順序是

standardserver、standardservice、standardengine、connector。每個容器都在初始化自身相關設定的同時,將子容器初始化。

Tomcat原始碼分析

本文將會介紹tomcat的原始碼,並給出一些分析。org.apache.catalina.startup.bootstrap 該類是tomcat啟動的入口類,包含有main方法。它的主要工作包括 引數解析 環境變數讀取 設定 類載入器初始化 通過反射的方式來呼叫catalina。org.apache...

Tomcat 原始碼分析

tomcat 原始碼分析 bootstrap 引導過程 1 初始化自定義的類載入器 common shared catalina 2 建立並例項化第乙個元件類 catalina tomcat 元件體系 server service connector engine host context 實現li...

tomcat原始碼分析

1 執行環境 tomcat 版本 8.0.x 編譯工具 ant 執行ide idea13.1 2 tomcat架構組成 如下圖所示 server 其實就是background程式,在tomcat裡面的server的用處是啟動和監聽服務端事件 諸如重啟 關閉等命令。service 在tomcat裡面,...