最近在看《How Tomcat Works》,由于书中介绍的是tomcat4.0的源码实现,但是对于学习来说已经是足够足够了,想对4.0版本的源码进行调试,就到网上找了找,网上大多是tomcat6.0版本以上的源码调试,想了想,虽然版本不同,但是原理大同小异,最后花了点时间,终于调通了。
1、tomcat4.0系列源码下载
我使用的是tomcat-4.1.12-src.zip,网址:http://download.youkuaiyun.com/detail/u012945986/9656777 解压过后目录结构为:
2、在myeclipse中新建java项目,拷入源码,并导入jar包
新建java项目例如我的是apachetomcat,从源码目录:\catalina\src\share 拷贝源码到apachetomcat的src下,拷完之后肯定要报错,这时在项目新建lib文件夹,将需要的jar包全部build path,jar包我是从tomcat4安装程序里拷的,但是还会有一些jar包里面是没有的,我是从网上找的。
3、将\catalina\src\conf 配置文件拷入项目的config
将\catalina\src\conf里的配置文件拷到项目目录下,你可以直接拷config目录,目录里可能会缺少一个叫jk2.properties的配置文件,你可以从网上找找
4、找到apachetomcat\src\org\apache\catalina\startup文件下Bootstrap.java
Bootstrap.java文件是tomcat启动的入口文件,如下:
public static void main(String args[]) {
// Set the debug flag appropriately
for (int i = 0; i < args.length; i++) {
if ("-debug".equals(args[i]))
debug = 1;
}
// Configure catalina.base from catalina.home if not yet set
if (System.getProperty("catalina.base") == null)
System.setProperty("catalina.base", getCatalinaHome());
// Construct the class loaders we will need
ClassLoader commonLoader = null;
ClassLoader catalinaLoader = null;
ClassLoader sharedLoader = null;
上面是它main方法的部分代码
5、运行tomcat
右键Run as->Run configures..,找到Arguments,program arguments:start,如下:
运行控制台结果为:
十月 18, 2016 1:19:06 下午 org.apache.commons.modeler.Registry loadRegistry
信息: Loading registry information
十月 18, 2016 1:19:06 下午 org.apache.commons.modeler.Registry getRegistry
信息: Creating new Registry instance
十月 18, 2016 1:19:06 下午 org.apache.commons.modeler.Registry getServer
信息: Creating MBeanServer
十月 18, 2016 1:19:07 下午 org.apache.coyote.http11.Http11Protocol init
信息: Initializing Coyote HTTP/1.1 on port 8080
Starting service Tomcat-Standalone
Apache Tomcat/@VERSION@
十月 18, 2016 1:19:07 下午 org.apache.coyote.http11.Http11Protocol start
信息: Starting Coyote HTTP/1.1 on port 8080
十月 18, 2016 1:19:07 下午 org.apache.jk.common.ChannelSocket init
信息: JK2: ajp13 listening on /0.0.0.0:8009
十月 18, 2016 1:19:07 下午 org.apache.jk.server.JkMain start
信息: Jk running ID=0 time=1/19 config=D:\workapace\apachetomcat\conf\jk2.properties
大功告成!
最后项目目录结构为:
其中webapps目录为你的项目目录,work目录是运行时tomcat自动生成的运行目录