Tomcat原始碼分析(一) 架構

2021-07-06 07:18:47 字數 1670 閱讀 3715

摘自

廢話少說,拉**,匯入eclipse開幹,具體步驟可以參考

下面談談我對tomcat架構的理解

總體架構:

1)面向元件架構

tomcat**看似很龐大,但從結構上看卻很清晰和簡單,它主要由一堆元件組成,如server、service、connector等,並基於jmx管理這些元件,另外實現以上介面的元件也實現了代表生存期的介面lifecycle,使其元件履行固定的生存期,在其整個生存期的過程中通過事件偵聽lifecycleevent實現擴充套件。tomcat的核心類圖如下所示:

catalina:與開始/關閉shell指令碼互動的主類,因此如果要研究啟動和關閉的過程,就從這個類開始看起。

server:是整個tomcat元件的容器,包含乙個或多個service。

service:service是包含connector和container的集合,service用適當的connector接收使用者的請求,再發給相應的container來處理。

connector:實現某一協議的聯結器,如預設的有實現http、https、ajp協議的。

engine:engine包含host和context,接到請求後仍給相應的host在相應的context裡處理。

host:就是我們所理解的虛擬主機。

context:就是我們所部屬的具體web應用的上下文,每個請求都在是相應的上下文裡處理的。

下面就是些被container所用的基礎元件:

loader:是被container用來載入各種所需的class。

manager:是被container用來管理session池。

realm:是用來處理安全裡授權與認證。

分析完核心類後,再看看tomcat啟動的過程,tomcat啟動的時序圖如下所示:

從上圖可以看出,tomcat啟動分為init和start兩個過程,核心元件都實現了lifecycle介面,都需實現start方法,因此在start過程中就是從server開始逐層呼叫子元件的start過程。

2)基於jmx

tomcat會為每個元件進行註冊過程,通過registry管理起來,而registry是基於jmx來實現的,因此在看元件的init和start過程實際上就是初始化mbean和觸發mbean的start方法,會大量看到形如:

registry.getregistry(null, null).invoke(mbeans, "init", false);

registry.getregistry(null, null).invoke(mbeans, "start", false);

這樣的**,這實際上就是通過jmx管理各種元件的行為和生命期。

3)事件偵聽

各個元件在其生命期中會有各種各樣行為,而這些行為都有觸發相應的事件,tomcat就是通過偵聽這些時間達到對這些行為進行擴充套件的目的。在看元件的init和start過程中會看到大量如:

lifecycle.firelifecycleevent(after_start_event, null);這樣的**,這就是對某一型別事件的觸發,如果你想在其中加入自己的行為,就只用註冊相應型別的事件即可。

hessian原始碼分析(一) 架構

在計費中心的對外互動這塊採用了hessian,有必要對hessian的執行機理和原始碼做一定的解析。大致翻了翻原始碼後,發現hessian的主要結構分客戶端與服務端,中間基於http傳輸。客戶端主要做的事情是把對遠端介面呼叫序列化為流,並傳輸到服務端 服務端主要做的事情是把傳輸過來的流反序列化為對服...

hessian原始碼分析(一) 架構

在計費中心的對外互動這塊採用了hessian,有必要對hessian的執行機理和原始碼做一定的解析。大致翻了翻原始碼後,發現hessian的主要結構分客戶端與服務端,中間基於http傳輸。客戶端主要做的事情是把對遠端介面呼叫序列化為流,並傳輸到服務端 服務端主要做的事情是把傳輸過來的流反序列化為對服...

一 架構基礎

1.1 系統與子系統 系統 一群有關聯的個體,根據某種規則運作,完成單個元件不能單獨完成的工作能力。1.2 模組與元件 模組 從邏輯的角度來拆分得到的單元。劃分模組的目的是職責分離。元件 從物理的角度來拆分得到的單元。劃分的目的是單元復用。1.3 框架與架構 框架 為了實現元件規範,提供規範的基礎功...