【Tomcat 源碼系列】源碼構建 Tomcat


一,前言

這篇博客寫於 12 月 12 日,從 github[1] 上 fork 了一份 tomcat 的源代碼,clone 到了本地。最近想把 tomcat 的源代碼分析一下,寒假的時候有完整的時間就造個輪子。

看源碼,總不能干看,邊看邊改,驗證想法。所以這個系列從構建 tomcat 開始。首先要聲明的是,以前沒有完整看過一個項目的經歷,tomcat 是第一次嘗試看的源碼。因此,這個系列可能存在描述不正確的問題,希望讀者能幫忙指正。最后,感謝您的閱讀!

這篇博客主要內容是,在 Windows 上,使用 Intellj-IDEA 編譯運行 Tomcat。

二,問題

讀源代碼,要帶着問題去閱讀。有一些是自己想的,有一些是 How Tomcat Works[2] 的目錄,還有一些來自於別人的博客[3]。這個部分可能會時不時更新一下,因為在搬磚的時候,可能突然對某個問題產生了興趣,遂記錄下來。一開始只寫了 8 點,不知道以后這個列表會更新出多少點呢。

  1. 一個 Http 請求和響應,是如何轉變成 Servlet 的請求和相應的?
  2. Servlet 是如何抽象 Http 請求的?
  3. Tomcat 如何管理 tcp 連接?
  4. Tomcat 如何管理輸入輸出流?
  5. Tomcat 的生命周期,如何啟動的?如何運行?
  6. Session 如何管理?
  7. 如何加載類?
  8. Tomcat 如何管理 servlet 容器,如何連接?
  9. 不同的瀏覽器連接上應用,如何判斷是不同的客戶端呢?是 Tomcat 負責判斷的嗎?
  10. JSP 頁面如何轉為 java 代碼,輸出 html 文件?

問題就暫且提出這些。不知道這個 Tomcat 源碼閱讀系列是否能夠完成呢(/▽\)。不管怎樣,先搭個環境,用自己喜歡的 IDE(IntelliJ IDEA) 來閱讀、調試源碼。

三,步驟

  1. 下載源代碼,這里在 github 上下載
  2. 選擇正確的 JDK 版本,官方使用的是 JDK 8
  3. 下載 Ant 工具,Tomcat 使用 Ant 來構建
  4. 配置依賴包的下載位置
  5. 使用 Ant 構建
  6. 使用 Ant 創建 IDE 工程,IDE 支持 Intellij-IDEA,NetBean,Eclipse

獲取源代碼,安裝對應的 JDK 版本,下面就不解釋了。下面主要講講如何使用 Ant 工具來開發,在寫這篇博客之前,其實我自己也沒有想到構建 Tomcat 是很簡單的事情。官方還很貼心的考慮到了,開發者可能會使用 IDE 來開發,於是給開發者配置好了環境。使用對應的 Ant 任務就可以有對應 IDE 的工程文件了。下面的步驟,具體可以看官方的構建步驟

1 安裝 Ant

直接去這里下載 Ant 的包,然后配置環境變量。

添加一個新的環境變量:

變量名:ANT_HOME
變量值:C:\Program Files\apache-ant-1.9.15

增加如下到 Path 中。

變量值:%ANT_HOME%\bin

在 cmd 當中輸入 ant,如果可以找到命令,那么說明成功了。

2 配置下載位置

進入下載好的 Tomcat 目錄中,我這里 tomcat 的根目錄是 D:\Code\tomcat

新建一個文件 build.properties,復制以下的內容。指定依賴包的保存地址。

# ----- Default Base Path for Dependent Packages -----
# Replace this path with the directory path where dependencies binaries
# should be downloaded
base.path=D:\\Code\\tomcat\\lib

3 使用 Ant 構建

輸入 ant 即可,他會先下載構建需要的包,然后構建項目。構建好了如何運行呢?這個請不要着急,往后看會講的。

4 使用 IDEA 構建

輸入命令 ant ide-intellij 即可構建 IDEA 的項目。官方還提供了 eclipse 和 netbean。

接下來,就會下載 IDEA 需要的包,並且會將提供的項目文件復制到 Tomcat 目錄下。之后就可以使用 IDEA 來打開了。

5 Bug

官方的代碼里面,build.properties.defaultres\ide-support 下的版本對應不上,於是會出現下面的報錯。下面給出兩種解決方案。

解決方案一

添加依賴。

打開 Project Structure

添加依賴

解決方案二

修改 res\ide-support\idea\tomcat.iml 中對應的版本,然后重新構建就好了。

四,運行

Tomcat 的運行有兩種方式,一種是使用官方的腳本來運行,另一種是使用 org.apache.catalina.startup 中的 BootStrap 類。

方式一

首先使用 ant 構建好項目,然后進入 output\build 文件夾。

接着修改 conf\logging.properties 下的編碼,不然控制台要輸出亂碼了。

最后進入,bin\startup.bat 雙擊一下就可以運行了。進入 http://localhost:8080/ 就可以查看是否運行成功。

方式二

使用 org.apache.catalina.startup 中的 BootStrap 類。使用 IDEA 來啟動這個類。首先要配置好參數,我們把方式一中的命令行參數拷貝到 IDEA 的啟動參數里面即可。

不過 IDEA 的控制台輸出仍然會有亂碼,可以選擇使用英文來避免這個問題。

選擇org.apache.catalina.startup 中的 BootStrap 類作為啟動類,點擊啟動配置。

將以下參數加入到 VM 選項中。

-Djava.util.logging.config.file=D:\Code\tomcat\output\build\conf\logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djdk.tls.ephemeralDHKeySize=2048
-Djava.protocol.handler.pkgs=org.apache.catalina.webresources
-Dcatalina.base=D:\Code\tomcat\output\build
-Dcatalina.home=D:\Code\tomcat\output\build
-Djava.io.tmpdir=D:\Code\tomcat\output\build\temp
-Dfile.encoding=UTF-8
-Duser.language=en
-Duser.region=US

點擊啟動!so easy。接下來就是一邊閱讀源碼,一邊調試看看了。

參考

[1] https://github.com/apache/tomcat

[2] How Tomcat Works 2

[3] http://www.iocoder.cn/Tomcat/Tomcat-collection/

[4] https://tomcat.apache.org/tomcat-10.0-doc/building.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM