您的位置:首页 > 运维架构 > Tomcat

【Tomcat 源码系列】源码构建 Tomcat

2020-12-12 23:39 1181 查看

一,前言

这篇博客写于 12 月 12 日,从 github[1] 上 fork 了一份 tomcat 的源代码,clone 到了本地。最近想把 tomcat 的源代码分析一下,寒假的时候有完整的时间就造个轮子。

看源码,总不能干看,边看边改,验证想法。所以这个系列从构建 tomcat 开始。首先要声明的是,以前没有完整看过一个项目的经历,tomcat 是第一次尝试看的源码。因此,这个系列可能存在描述不正确的问题,希望读者能帮忙指正。最后,感谢您的阅读!

这篇博客主要内容是,在 Windows 上,使用 Intellj-IDEA 编译运行 Tomcat。

二,问题

读源代码,要带着问题去阅读。有一些是自己想的,有一些是 How Tomcat Works[2] 的目录,还有一些来自于别人的博客[3]。

  1. 一个 Http 请求和响应,是如何转变成 Servlet 的请求和相应的?
  2. Servlet 是如何抽象 Http 请求的?
  3. Tomcat 如何管理 tcp 连接?
  4. Tomcat 如何管理输入输出流?
  5. Tomcat 的生命周期,如何启动的?如何运行?
  6. Session 如何管理?
  7. 如何加载类?
  8. Tomcat 如何管理 servlet 容器,如何连接?

问题就暂且提出这些。不知道这个 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.default
res\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 的控制台输出仍然会有乱码,可以选择使用英文来避免这个问题。

-Djava.util.logging.config.file=D:\Code\tomcat\output\build\conf\logging.properties
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djdk.tls.ephemeralD
131b
HKeySize=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

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: