如何閱讀Tomcat源代碼?

如題,最近打算閱讀以下Apache Tomcat 6的源代碼,請曾經閱讀過的高人指點一二!


想起之前看過的一篇文章《五年java人的一點感悟》

裡面作者有講到怎麼閱讀tomcat源代碼,可以看看

http://www.jdon.com/jivejdon/thread/42708

摘錄其中幾句

「下面說說我對tomcat源碼研究的幾點展望,眾所周知,tomcat是一個開源的Servlet容器,而這個容器的主要作用就是負責處理和響應客戶請求(我們暫且忽略其他的一些次要的方面)。那麼好,我們可以先做這樣一個比喻,tomcat應該可以比作一部機器,這部機器可以接受客戶端的請求,並返回一個結果給客戶端,而且這部機器的原材料是java。那麼我們想知道,這部機器的結構是怎麼樣的?它的組成部分有哪些,這些組成部分是如何被組織到一塊的?這應該是第一步,即對tomcat的整體組成要有個縱覽,知道tomcat這部機器都有些什麼組成部分,知道每一部分主要都負責了什麼工作,這一點非常重要;那麼第二步,就是,這部機器是如何啟動的?。。。。。 」


先看《深入剖析Tomcat》,了解Tomcat的基本原理之後,就可以了。。。

至於細節的話,有實際的問題或是需求的時候再看...

對了,還有一本書叫《Tomcat6 Developer"s Guide》,我正在看,英文版,正在看,畢竟《深入剖析Tomcat》介紹的是Tomcat4...╮(╯▽╰)╭


分析Tomcat容器,從《深入剖析Tomcat》上截取一部分介紹來回答這個問題。

分析Tomcat其實就是分析一個Servlet容器,我們從 servlet容器的角度來看看 Tomcat。一個功能健全的 servlet容器對於每個 servlet 的HTTP請求會完成以下事情:

(1)當servlet 第一次被調用的時候,載入了 servlet類並調用它的init方法(僅調用一次)

(2)響應每次請求的時候 ,構建一 個javax.servlet.ServletRequest 和 javax.servlet.ServletResponse實例。

(3)調用servlet的service方法,將ServletRequest對象 和 ServletResponse 對象當作參數傳入。

(4)當servlet類關閉的時候,調用servlet的destroy方法,並卸載servlet類。

圍繞著上面幾點也許就能很好的展開了,我也是在學習中,加油!

-----------------------------------------------------------------------------------------------------------------------

另外給個建議,從啟動代碼中閱讀一般是比較好的方法。

比如分析下

web.xml 中的listener、 filter、servlet 載入順序


《How Tomcat Works》這本書還行,只是講的版本老了點,建議看看別人寫的源碼分析技術博客。


要帶著問題看,明白自己的關注點:

tomcat 首先是個http伺服器,關注點有tcp連接的處理,http協議的解析等,然後是個java servlet容器,關注點有應用的載入,classloader隔離等,同時tomcat支持jsp,關注點有jsp的語法解析,動態編譯,動態載入等。當然作為成熟的容器,還有許多管理功能監控功能等。


確實,和樓上幾位說的一樣,可以從How tomcat works入手,這本書中文英文的都有。如果不打算看書,網上也有許多分析源碼的blog。如果直接從源碼入手的話,縮小一個範圍比較好,例如要了解Servlet的生命周期管理,這個時候真好可以對應Tomcat中的Wrapper組件,了解servlet類是何時初始化,什麼時候destory的。如果對請求處理比較感興趣,可以從默認的JIoEndPoint類入手,這是默認bio處理的類,Nio對應的則是NioEndpoint類,在類內的請求包裝,線程的各類處理等。這樣按一類的問題來DEBUG源碼,感覺更好入手一些。

====更新

最近又寫了一篇導入源碼debug的流程與方式,感興趣的可以移步這裡

怎樣調試Tomcat源碼

=====更新,寫了一篇關於源代碼閱讀的文章,歡迎閱讀。

怎樣閱讀源代碼? - chainho的文章 - 知乎專欄


《How Tomcat Works》一本了解Tomcat源碼及原理非常不錯的書籍

http://books.brainysoftware.com/index.jsp?show=tomcat


有本書叫&,邊讀這個邊讀源碼將您很有幫助


建議看Jetty。Tomcat發展至今,代碼量過於巨大,比較難於理解。


最好先了解tomcat的工作機制再看代碼更好


先看how tomcat works 再看源碼,或者結合著看,tomcat由很多組件組成,如connector(coyote),servlet容器catalina等,不能籠統地看,看某個組件就專看這個組件抓住重點,帶著問題去看,

動手的話,先下載源碼導入eclipse的功能,藉助IDE會有很多便利。


為了找問題看過部分,順著啟動入口摸進去的;

光看源碼比較慢,拿eclipse 打斷點調試,著看比較快一些,調的時候源碼要找對版本.


Tomcat源碼分析(一)------ 架構

讀一讀博客


《Tomcat內核設計剖析》


從簡單到深入,從簡單入手無非就是整體的架構設計,怎麼啟動的,怎麼接收請求的。

尋找ServerSocket、HttpServletRequest、HttpServletResponse。

當然源碼部署肯定是少不了的,Tomcat 6 Software Downloads,搞起來騷年

參考 Tomcat6之架構概述 Tomcat6源碼淺析


手動編譯源碼 了解tomcat運行原理...安裝tomcat架構圖 debug運行 慢慢看每個類 為毛要這樣寫 這樣設計


推薦閱讀:

Android Framework源碼當中哪些類有必要進行深入學習?
國外有哪些優秀的源碼剖析類書籍?
關於閱讀開源項目的源碼,有哪些經驗值得分享?

TAG:Java | ApacheTomcat | 源碼閱讀 |