Tomcat 7.0.42 源代碼運行環境搭建

《Tomcat 7 源碼分析》系列文章是我 2013 年到 2015 年間寫在 ITeye 上的相關博客彙總,從後臺的訪客記錄看一直到如今還有不少人在讀,也是訪問量最多的系列,原本計劃要寫 8 點:java

1. 容器啓動,從server到listener、jndi、service到connetor、engine到host到context到wrapper一系列對象的組裝,包括Digester的使用、JMX註冊、JDK5中的新的線程池啓動方式等。web

2. 一個socket鏈接如何轉化成request的。apache

3. 一條請求響應鏈在容器中流轉的通過。tomcat

4. 容器的自定義classloader機制。websocket

5. session如何實現,特別是集羣環境中的session粘滯和session複製的實現。session

6. nio處理方式的實現。app

7. servlet3新規範中websocket的實現。eclipse

8. 容器的關閉機制。socket

結果只寫了 一、二、三、8 ,後面有空將再把這個系列寫完。我最近也把博客的首發地改到了掘金,爲了保持這個系列的完整性,先把之前寫過的轉過來吧。源碼分析

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

之前看過 Tomcat 5 的一部分源代碼,當時只看了個大概的啓動分析,後來看了《How Tomcat Works》這本書,講的還行。但出版的較早,因此是基於 Tomcat 4 的代碼分析,Tomcat 已經 release 到 7 (2013年的時候)了,不少後來添加的特性與新的實現方式那本書裏面沒有涉及。下半年業餘時間的主要任務就是完成 Tomcat 7 各個我感興趣的點的系列文章。

先說下個人源碼分析的環境搭建吧,用的是 eclipse Juno Service Release 1,而後在 tomcat官網下了 tomcat7.0.42的源碼 ,這兩樣準備好以後即是搭建可以運行源碼的調試環境了。

1. 在 eclipse 中新建一個 java 項目,項目取名 tc7.0.42


JRE 選擇 1.6 的


其餘設置默認


2. 將下載的 tomcat 源碼包解壓開,並拷貝到 Eclipse 裏新建的項目根目錄下


注意,我這裏將源碼解壓開後的 bin 目錄重命名成 script 以後才拷貝的,由於新建的 Java 項目中默認編譯後的文件存放目錄是 bin ,這樣作防止編譯後的文件覆蓋原來拷貝過去的內容。



3. 將項目中默認的 src 目錄刪掉,java 和 test 做爲源目錄




4. 此時會發現項目中缺乏一些類,須要手動將依賴的 jar 包添加進來,因此新建了一個 depend-lib 目錄


5. 實際上缺乏的這些 jar 包 eclipse 安裝目錄裏面都有,直接拷貝過來就能夠了。

在 eclipse 安裝目錄的 plugins 目錄下,搜索 "ant.jar"


搜索 "javax.wsdl" ,選版本較高的那個 jar 包


搜索 "jaxrpc" 


搜索 "jdt.core" 選最大的那個 jar 包


6. 把這些 jar 包加入到編譯路徑裏


7. 此時發現 test 目錄下還有錯誤,其實是由於 test 裏面用到了 junit 的一些註解,因此須要將 junit4 引進來

右擊項目,點擊 Build Path ,選擇 Add Libraries


選擇 junit


下一步,junit 版本選擇 JUnit 4


自此整個項目應該能夠編譯了。

8. 接下來運行項目根目錄下的 build.xml ,執行默認的 ant 任務,看看項目構建的有沒有問題。




控制檯輸出 "BUILD SUCCESSFUL" 表示編譯構建成功。


9. 此時刷新整個項目,會發現多出一個 output 目錄


10. 爲了讓應用跑起來,能夠檢查一下 output\build\conf 下是否已經有配置文件,這些文件實際是從項目根路徑 conf 目錄下拷貝過來的。

11. 找到 BootStarp.java 文件,Debug 前加入默認的 catalina home 路徑做爲啓動參數。

BootStarp.java 文件右鍵選擇 Debug As -> Debug Configurations


路徑設置爲 output 下 build 的絕對路徑。好比我本身的機器設置的值是 -Dcatalina.home="E:\workspace\study\tc7.0.42\output\build" 


這樣就能夠在文件中加入斷點 Debug 源碼分析了。

相關文章
相關標籤/搜索