1. 程式人生 > >tomcat原始碼淺析(一)之 架構

tomcat原始碼淺析(一)之 架構

     tomcat程式碼看似很龐大,但從結構上看卻很清晰和簡單,它主要由一堆元件組成,如Server、Service、Connector等,並基於JMX管理這些元件,另外實現以上介面的元件也實現了代表生存期的介面Lifecycle,使其元件履行固定的生存期,在其整個生存期的過程中通過事件偵聽LifecycleEvent實現擴充套件。

    1.類圖

    1.1核心類圖如下所示:

    1.2詳細類圖如下所示:


 2.各元件介紹

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

    Server:是 整個Tomcat元件的容器,包含一個或多個Service。

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

    Connector:實現某一協議的聯結器,如預設的有實現HTTP、HTTPS、AJP協議的。

    Container:可以理解為處理某型別請求的容器,處理的方式一般為把處理請求的處理器包裝為Valve物件,並按一定順序放入型別為Pipeline的管道里。Container有多種子型別:Engine、Host、Context和Wrapper,這幾種子型別Container依次包含,處理不同粒度的請求。另外Container裡包含一些基礎服務,如Loader、Manager和Realm。

     Engine:Engine包含Host和Context,接到請求後仍給相應的Host在相應的Context裡處理。

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

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

     Wrapper:Wrapper是針對每個Servlet的Container,每個Servlet都有相應的Wrapper來管理。

    可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper這些核心元件的作用範圍是逐層遞減,並逐層包含。

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

    Loader:是被Container用來載入各種所需的Class。

    Manager:是被Container用來管理Session池。

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

3.事件偵聽

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

4.基於JMX

   tomcat會為每個元件進行註冊過程,通過Registry管理起來,而Registry是基於JMX來實現的。

5.各個元件會有一個backgroundProcess方法。在容器start時backgroundProcessorDelay>0會啟動一個執行緒ContainerBackgroundProcessor來定時呼叫子類和Loader,Manager,Realm,Cluster的backgroundProcess來更新。頻率為backgroundProcessorDelay * 1000ms。backgroundProcessorDelay預設是10。

6.初始化過程

   tomcat初始化的時序圖如下: