原地址:http://denger.iteye.com/blog/834121
近期对 Tomcat 的一些原理机制产生了兴趣,于是便下载源码进行 DEBUG 来一探究竟~
TOMCAT_6_0_18.zip 包下载地址: http://pan.baidu.com/s/1mgGcPug
下载解压后的目录结构:
很明显它是基于 ANT 来构建,直接通过
Eclipse -> New -> Java Project form
Existing Ant Buildfile 直接选择 TOMCAT_6_0_18下面的 build.xml
文件,
然后在列出来的 task 中的 target 选择 complie 即可导入工程。
还没有完,他的编译还依赖了四个 jar 文件,分别是:
ant.jar、 jaxrpc.jar
、org.eclipse.jdt.core_3.8.3.v20130121-145325.jar、wsdl4j-1.5.1.jar,需要将这四个 jar
文件引入进去。
OK了,接下来直接在Eclipse 中的 Debug Configurations 中加入一个启动 Tomcat 的
Appliction.
具体在 Java Application 中加入Main启动项,选择刚才导入的 Tomcat 6.0项目(实际名字Bootstrap),
Main
class 填写 org.apache.catalina.startup.Bootstrap 启动类,
Arguments :
在
Program arguments 填写 start ,
在 VM arguments 中填写 tomcat home
的路径(源码路径),如:-Dcatalina.home="E:\tomcat-src\TOMCAT_6_0_18"。
如下图所示:
配置好后,直接 Apply 并且 Debug,这时候直接启动会出现如下异常:
---此段本人没有测试
Java代码
- java.lang.ClassNotFoundException: listeners.ContextListener
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1645)
- at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1491)
原因是因为在 tomcat 中的 webapps 中有一个 example 的 webapp, 在这个 app 的
web.xml 配置了 listeners.ContextListener 的监听,而这个类在它 classpath 中不存在。解决办法是将
example 直接删除,反正也不影响 debug。
至此已经完成了 Tomcat 的部署,接下来要去开始 DEBUG了~ ........