tomcat源码编译

最近因为需求需要修改Tomcat中的某些功能,无奈只能研究那部分源码然后稍作修改。

目前Tomcat最新版是8.0,下载了源码包,编译并导入Eclipse中研究比较方便。


1. Tomcat8源码编译步骤

1.1 先到Apache Tomcat 8.0官网下载最新版Source Code Distributions,解压到某个目录下,如D:\apache-tomcat-8.0.5-src


1.2 使用ant编译

(1)安装ant

如果机器上已经安装了ant可以省略这一步,否则去ant官网下 载最新版ant Binary Distributions,解压到某个目录下,如D:\Program Files\apache-ant-1.9.3,然后配置环境变量。要么新建个ANT_HOME,值为ant路径,然后在PATH中添加ant bin路 径为%ANT_HOME%/bin,要么直接在PATH中添加ant bin路径为D:\Program Files\apache-ant-1.9.3\bin。配置好后,在cmd下运行ant  -version,如果显示版本说明配置成功,我们就可以随地使用ant了。


(2)编译Tomcat 8.0

非常简单,cmd进入到刚下载的源码路径下,用下面两个命令即可编译:

ant download
ant

"ant download"命令会下载编译Tomcat所需的依赖包。

这里有两个问题需要注意:

  • 依赖包下载到什么地方?在Linux或MacOX下,会默认下载到 “/usr/share/java” 目录,当然该目录普通用户是没有权限写的;在Windows下,默认下载到 "某个磁盘:\usr\share\java" ,这的磁盘可能是C、D或其它,这一般取决于你把Tomcat源码放在哪个盘了,比如我的放在D盘,默认就下载在 "D:\usr\share\java" 下。如果我想自己定义下载路径怎么办?
  • 如果用户是通过代理上网的,那么下载过程中就会出错。怎么解决?

熟悉ant的人应该知道怎么解决,就是通过配置文件build.properties来 设置。该配置文件在Tomcat源码路径下为 “build.properties.default” ,我们可以去掉.default后缀或直接新建一个build.properties都可以,当然我选择了前者,将 “build.properties.default” 修改为 “build.properties” 打开, 修改里面的base.path属性值为我们希望的下载路径并添加proxy代理配置,格式如下:

复制代码
# ----- Proxy setup -----
# Uncomment if using a proxy server
proxy.host=proxy.domain
proxy.port=8080
proxy.use=on

# ----- Default Base Path for Dependent Packages -----
# Replace this path with the directory path where dependencies binaries
# should be downloaded
base.path=/home/me/some-place-to-download-to
复制代码

根据自己的需要进行设置,注意如果不需要某项设置需要用#注释掉。

依赖包下载成功后(如果下载失败可以多试几次),执行ant即可编译,编译成功后当前路径下回多出个output文件夹,就是我们的编译结果。


附:

①如果你修改了部分源码,需要重新编译 ,直接进入到源码路径,执行ant命令即可。

②如果需要编译servlet和jsp API文档,进入到源码路径下执行如下命令:

ant -f dist.xml dist-javadoc

③如果需要编译extras扩展功能(commons-logging, webservices etc.),进入到源码路径下执行如下命令:

ant -f extras.xml

④如果需要编译成release版本,进入到源码路径下执行如下命令:

ant -f dist.xml release

 

2. 将Tomcat源码导入到Eclipse中研究

由于Tomcat不是Eclipse管理的项目,因此不能直接导入,需要新建一个Java项目,比如为Tomcat8,这时有两种方法就源码导入进来。

第一种:将所需要的源码包java和test(Junit测试用例,可选)两个文件夹直接拷贝到src下。

第二种:选择File - > import -> File System,在From directory中选择tomcat源码包中的java和test两个文件夹,在Into folder中选择我们刚新建的Tomcat8项目,Finish,然后记得将这两个文件夹标记为source code(怎么标记?右键选择者文件夹 -> Build Path -> Use as Source Folder)。

当然这样过后就不是完事了,这时会发现整个项目很多红叉,也就是缺少依赖包,在Build Path里加上下面的几个依赖包即可:

Java包需要下面四个jar包,注意版本可能不一样:

 注意:依赖的包在编译成功时,已经下载到本地磁盘上例如:D:/usr/share...

test包里需要junit.jar,直接“Add Libraries...”选择Junit即可:

junit.jar

当然也可以在Eclipse中启动Tomcat,方法如下:

找到类:org.apache.catalina.startup.Bootstrap.java,从名字上也可以看出是启动类,如果你此时直接运行该类,会报如下错误:

Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:\workspace\Tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:38 PM org.apache.catalina.startup.ClassLoaderFactory validateFile
WARNING: Problem with directory [D:\workspace\Tomcat8\lib], exists: [false], isDirectory: [false], canRead: [false]
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:\workspace\Tomcat8\conf\server.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina load
WARNING: Can't load server.xml from D:\workspace\Tomcat8\conf\server.xml
Apr 02, 2014 3:27:40 PM org.apache.catalina.startup.Catalina start
SEVERE: Cannot start server. Server instance is not configured.

说没有配置服务器实例,从警告语句可以知道原因:当前项目路径下没有lib和conf这两个文件夹,从而找不到服务器配置文件server.xml,当然也就不能实例化服务器了。

解决方法有两个:

①将这两个文件夹直接拷贝到项目工程下

那么这两个文件夹在哪?去Tomcat源码路径里我们可以看到只有conf配置文件夹没有lib文件夹,其实这也是我编译Tomcat的原因:lib在编译后的output文件夹中的build文件夹里,conf这里也有。当然你也可以直接从官网下载二进制包,里面是编译好的Tomcat,根路径就有这两个文件夹。将build下面的conf和lib文件夹直接拷贝到项目里,再次运行,启动成功。

Apr 02, 2014 3:37:58 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: D:\Program Files\Java\jre7\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;D:\Program Files\TortoiseGit\bin;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;D:\Program Files\Gow\bin;D:\Program Files\Visual Leak Detector\bin\Win32;D:\Program Files\Visual Leak Detector\bin\Win64;D:\Program Files\Java\jdk1.7.0_51\\bin;D:\Program Files\apache-maven-3.2.1\bin;D:\Program Files\Git\cmd;.
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 2254 ms
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
Apr 02, 2014 3:38:00 PM org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/@VERSION@
Apr 02, 2014 3:38:00 PM org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Apr 02, 2014 3:38:00 PM org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Apr 02, 2014 3:38:00 PM org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/29  config=null
Apr 02, 2014 3:38:00 PM org.apache.catalina.startup.Catalina start
INFO: Server startup in 386 ms

②添加VM虚拟机运行参数

第二种方法就是添加VM参数,指定这两个文件夹的具体路径,用VM的-D参数指定catalina.home属性值为具体的路径,具体方法如下:

Run as -> Run Configuration... - > Arguments -> VM arguments中设置:

-Dcatalina.home="D:/apache-tomcat-8.0.5-src/output/build"

然后Run就可以启动了。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Tomcat是一个开源的Java Servlet容器,作为Java服务器发展过程中最重要的组件之一。Tomcat的源代码,指的就是Tomcat的开源代码。 Tomcat 8.5版本的源码Tomcat项目最新的稳定版本,它包含了Tomcat运行所必需的所有代码和配置文件。这个版本的Tomcat有很多改进和优化,例如对HTTP/2的支持、WebSocket的增强、Servlet 3.1规范的实现等。 Tomcat 8.5的源码以Java语言编写,使用了Java的一些高级特性和设计模式。这些源码主要包括核心组件的实现,例如Connector、Server、Service和Container等,还包括了一些相关的工具和附属组件的代码。 阅读Tomcat源码可以帮助我们更深入地理解Tomcat的运行机制和内部实现原理。通过阅读源码,我们可以学习到Tomcat是如何处理HTTP请求和响应的、如何管理Servlet的生命周期、如何处理Session和Cookie等。阅读源码还可以帮助我们更好地定位和解决Tomcat的问题,以及进行自定义的扩展和优化。 阅读Tomcat源码需要一定的Java编程基础和相关的Web开发知识。可以通过下载Tomcat源码,使用Eclipse等IDE工具进行调试和阅读,逐步理解其中的逻辑和细节。在阅读源码的过程中,可以查阅官方文档和源码注释,也可以参考一些相关的书籍和教程。此外,还可以参加Tomcat社区的讨论和交流,与其他开发者一起探讨和分享经验。 总之,阅读Tomcat 8.5的源码是一个学习和提升自己的好途径,通过深入理解Tomcat源码,我们可以更好地使用和开发Tomcat,提高Web应用的性能和稳定性。 ### 回答2: Tomcat 8.5是一个用Java编写的开源Web服务器和Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。要理解Tomcat 8.5的源代码,需要对Java编程和网络通信有一定的了解。 Tomcat 8.5的源代码是一个庞大而复杂的项目,由许多模块和包组成。它包括了处理HTTP请求的核心部分,处理Servlet和JSP的部分,以及其他一些与Web应用程序部署和管理相关的模块。 在Tomcat 8.5的源代码中,你会看到许多Java类和接口,这些类和接口定义了处理HTTP请求和响应的各种功能,包括建立网络连接、解析HTTP请求、执行Servlet和JSP、处理会话状态、处理静态资源等。这些类和接口之间通过继承和组合来建立关系,形成了一个完整的处理流程。 在Tomcat 8.5的源代码中,你还会看到许多配置文件和注释,这些文件和注释用来配置Tomcat服务器和Web应用程序的行为。配置文件包括服务器配置文件、虚拟主机配置文件、Web应用程序部署描述文件等。通过配置文件,你可以在不改变源代码的情况下改变服务器和应用程序的行为。 了解Tomcat 8.5的源代码对于开发和维护Web应用程序非常有帮助。通过阅读源代码,你可以深入了解Tomcat的工作原理,了解HTTP协议和Servlet容器的细节,以及优化和定制Tomcat服务器和Web应用程序的方法。 总之,Tomcat 8.5的源代码是一个复杂而庞大的项目,通过阅读源代码,你可以深入了解Tomcat的工作原理和行为,并为开发和维护Web应用程序提供帮助。但是要理解Tomcat的源代码,需要对Java编程和网络通信有一定的了解。 ### 回答3: Tomcat8.5源码是Apache Tomcat的一个版本,它是一个流行的开源Java Servlet容器,用于在Java环境中运行Web应用程序。 Tomcat8.5的源码是以Java编写的,它的主要目的是实现Java Servlet和JavaServer Pages(JSP)规范。源码的结构非常复杂,包含多个模块和组件,比如Catalina模块用于处理Servlet容器功能,Coyote模块用于处理HTTP请求和响应,Jasper模块用于JSP页面的编译和执行,以及其他许多模块和组件用于提供各种功能。 Tomcat8.5源码的核心功能包括请求处理、会话管理、线程池管理、虚拟主机支持、安全性、类加载和内存管理等。源码的设计考虑了高性能、可扩展性和可靠性的因素。 了解Tomcat8.5源码可以帮助我们深入理解Servlet容器的工作原理,以及如何优化和扩展Tomcat的功能。阅读源码可以学习到一些Java技术的实现细节,比如多线程编程、网络编程和类加载机制等。 同时,通过阅读和分析Tomcat8.5源码,我们还可以学到一些优秀的软件工程实践,比如面向对象设计、模块化设计和代码重用等。这对我们提升自己的编程能力和代码质量都是非常有帮助的。 总之,Tomcat8.5源码是一个非常有价值的学习资源,通过研究它,我们可以深入了解Java Servlet容器的实现原理,并可以通过阅读优秀的源码来提升自己的编程能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值