Tomcat 源代碼學習(一)

學習建議:一下子就直接看源碼顯然是不理智的,因爲就算跟着debug一次也是毫無頭緒的。建議先看一遍 tomcat 的基本原理和架構。

框架背景

Apache Group在完成GNUJSP1.0的開發以後,開始考慮在SUN的JSWDK基礎上開發一個可以直接提供Web服務的JSP服務器,當然同時也支持Servlet, 這樣Tomcat就誕生了。Tomcat服務器是一個免費的開放源代碼的Web應用服務器。Tomcat是Apache軟件基金會(Apache Software Foundation)的Jakarta項目中的一個核心項目,由Apache、Sun和其他一些公司及個人共同開發而成。因爲Tomcat技術先進、性能穩定,而且免費,因而深受Java愛好者的喜愛並得到了部分軟件開發商的認可,是目前比較流行的Web應用服務器。

Tomcat是應用(Java)服務器,它只是一個Servlet容器,可以認爲是Apache的擴展,但是可以獨立於Apache運行。與Apache相比,Tomcat能夠動態的生成資源並返回到客戶端,Apache和Nginx都能夠將某一個文本文件的內容通過HTTP協議返回到客戶端,但是這個文本文件的內容是固定的,也就是靜態資源。當然Tomcat也能像Apache和nginx一樣處理靜態資源,但顯然,它既要處理動態請求,又要處理靜態請求,壓力會很大。因此Tomcat前一般使用Apache或nginx專門處理靜態請求,而動態請求則通過反向代理的方式代理至Tomcat。Tomcat運行時佔用的系統資源小,擴展性好,支持負載平衡與郵件服務等開發應用系統常用的功能。

Tomcat是一個小型的輕量級應用服務器,在中小型系統和併發訪問用戶不是很多的場合下被普遍使用,是開發和調試JSP程序的首選。同時,Tomcat比較容易擴展。由於是通過在這臺功能強大的服務器上運行的單個servlet容器,實際上也就不需要考慮session狀態在分佈式環境下的維護這類複雜的問題。

Tomcat的頂層結構

Tomcat具有高度模塊化,通過各個組件實現各功能。下圖爲Tomcat的頂層結構圖:
在這裏插入圖片描述 圖1 Tomcat的頂層結構

1)Sever.xml的分析

大體節點框架爲:

<Listener />

<GlobaNamingResources>

</GlobaNamingResources>

<Service>

    <Connector />

    <Engine>

        <Logger />

        <Realm />

           <host>

               <Logger />

               <Context />

           </host>

    </Engine>

</Service>

Tomcat9中沒有直接在sever.xml中實現,(官方不推薦),當我們也可以自行添加。

Server代表整個容器,是tomcat實例的頂層元素,其中可以包含多個service。Service中包含一個Engine和一個或多個Connector。Engine表示整個Servlet引擎,一個Engine下包含一個或者多個Host,即一個tomcat實例可以設置多個虛擬主機。Context元素代表了運行在虛擬主機上的單個Web應用。一個可以包含多個元素。每個web應用有唯一的一個相對應的Context代表web應用自身。Connector代表與客戶程序實際交互的主鍵,它負責接收客戶請求,以及向客戶返回響應結果。

2)Tomcat響應客戶請求大體流程:

在這裏插入圖片描述圖2 Tomcat響應流程

3)server初始化:
在這裏插入圖片描述圖3 Server的初始化

Bootstrap的load是通過反射交給catalina的load處理的。簡單描述一下catalina中load實現初始化組件的過程。首先,catalina中的load方法初始化目錄和命名服務,然後通過c-reateStartDigester來初始化Digester。(Digester的作用是對server.xml進行解析,完成tomcat的配置和構建響應的容器)創建出了StandardServer對象,接着便調用getServer().init(),在StandardServer的initInternal方法中會調用子組件Services的init方法,並依次傳遞下去,完成所有組件的init()。

綜上,catalina的load方法主要是根據conf/server.xml配置文件利用Digester創建服務器組件,然後調用Server的init方法,逐層次的實現所有組件的初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章