`
geshenyi
  • 浏览: 100976 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Tomcat编译和调试

    博客分类:
  • J2EE
阅读更多
咱们分析的是 tomcat 6

1. 下载Tomcat6.0的源代码

首先用 svn export 出源代码, 官网下的源码包我不知道有没有 build.xml , 读者可以验证一下, 我映像中是没有的。

exoprt 之前你可以在浏览器直接输入 http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/ , 然后选择要export 出来的版本。

svn export http://svn.apache.org/repos/asf/tomcat/tc6.0.x/tags/TOMCAT_6_0_0/ D:\carl_wu\tomcat\src\







2. 编译并运行

代码下载后,我们接下来就是要编译并运行Tomcat。一提编译,我们不禁会想到可爱的Ant。不错,Tomcat正是以Ant作为编译工具,如果您还没有安装,请从http://ant.apache.org/bindownload.cgi 处下载并安装它。然后,请从Tomcat的源代码文件找到build.properties.default文件,并将该文件复制到build.properties,然后打开build.properties,找到下面这行:

base.path=/usr/share/java

将它改为:

base.path= D:/carl_wu/tomcat/share

在Tomcat编译过程中,Ant会让我们下载一些必要的依赖项目,base.path目录就是用来保存这些项目文件的,我们可以将这个属性指向一个已经存在的目录。修改完base.path后,我们回到MS-DOS或Shell窗口,切换到Tomcat源代码所在目录,然后运行ant download命令,如下图所示:




download 一般最新的版本是没有问题的,如果是老版本的话,如果有链接失效了需要在 build.properties文件 改链接。

下完了后,下面就开始真正的编译任务了,请在MS-DOS或Shell窗口内键入ant并回车,Ant将在2分钟内编译1000多个源文件并将Tomcat部署到output目录。编译顺利完成后,请打开Tomcat的源代码目录,会发现多了一个output目录,这是Ant的编译后的输出目录。请打开Tomcat源代码的output\build\bin子目录,双击startup.bat文件,我们即可成功启动Tomcat6.0,此时我们的编译工作就算顺利完成了。


3. 导入源代码到Eclipse

3.1 请打开Eclipse,新建一个Java项目,然后点击“Next”按钮,请选择“Create project from existing source”, 并在Directory文本框内填入我们刚才下载的Tomcat源代码目录(i.e. D:\carl_wu\tomcat\src),然后点击“Next”直至结束。




3.2 我们将会看到Eclipse拒绝编译,这是因为Eclipse找不到该项目指定的库文件。请右击该项目,在弹出菜单中选择“Properties”=>“Libraries”,然后删除两个以TOMCAT_LIBS开头的两个库文件,只保留一个JRE库文件,然后点击“OK”按钮,这时Eclipse开始编译Tomcat源代码,但是发现一堆错误,这是因为我们没有为该项目添加编译所必须的Jar包。

3.3 准备好Tomcat项目所必须的jar文件,其实,刚才我们运行ant download任务时,已经下载过这些jar文件包。

ant.jar (请在ant安装目录的lib子目录中拷贝)

commons-collections-3.1.jar (从刚才Ant下载的commons-collections-3.1子目录中拷贝)

commons-dbcp-1.2.1.jar(从刚才Ant下载的commons-dbcp-1.2.1子目录中拷贝)

commons-logging-1.1.jar(如果您本机没有这个jar包,请从http://commons.apache.org/downloads/download_logging.cgi处下载)

commons-pool-1.2.jar(从刚才Ant下载的commons-pool-1.2子目录中拷贝)

org.eclipse.jdt.core_3.2.0.v_671.jar(从刚才Ant下载的eclipse\plugins子目录中拷贝)

3.4 当我们准备好这些jar文件后,将这些文件拷贝到某一目录(比如说D:\carl_wu\tomcat\tomcat_lib目录),然后在Eclipse中新建一个User Libraries,我们将这个新建的User Libraries命名为TOMCAT_LIBS,并把这些文件加到TOMCAT_LIBS。然后将我们新建的TOMCAT_LIBS添加到Tomcat6项目。另外,别忘了把JUnit库也加到Tomcat6项目。这时Eclipse开始重新编译,编译过程顺利通过,所有错误均消失,此时Tomcat6项目的目录结构如下:





还有,请把test目录也加入到源代码中,方法是在Eclipse中右击”test”目录,然后在弹出菜单中选择“Build path”=>”Use as Source Folder”,之后我们会看到test目录上就多了个源代码的符号,如上图所示。

3.5在Eclipse中运行Tomcat。请找到Tomcat的启动主类org.apache.catalina.startup.Bootstrap,右击这个类,在弹出菜单中选择“Run As…”=>”Open Run Dialog…”,然后在弹出的“Run”窗口中填入程序运行参数“start”和JVM运行参数catalina.home,如下面窗口所示:




然后点击“Run”按钮,我们将会看到Tomcat正常启动。恭喜,咱们的Tomcat源码已经成功导入Eclipse,这时,可视化的UML分析工具及Debug工具就能派上用场了。

3.5 调试Tomcat,请打开org.apache.jasper.compiler.Compiler类的源代码,在generateJava()方法的第一行打一个断点,然后在Eclipse的调试状态下运行Tomcat,等Tomcat运行后,打开我们的浏览器,在地址栏中输入http://localhost:8080/examples/jsp/jsp2/el/basic-comparisons.jsp并回车,然后我们可观察到Eclipse此时切换至调试视图:







上面的小实验表明我们可以在Eclipse中通过Debugger观察Tomcat的内部运行机理。另外补充一点,上面的generateJava方法是将jsp动态编译至java class,这个方法只是在第一次请求或者Jsp源码发生变化时执行,如果您再次在浏览器中发送同样的请求,您将看不到上图的Debug界面,因为该方法不再执行。

另外,还有一点很有意思。Tomcat6以前版本的源代码分散在好几个子项目中,他们分别叫做jakarta-servletapi-5,jakarta-tomcat-5,jakarta-tomcat-catalina,jakarta-tomcat-connectors和jakarta-tomcat-jasper,我觉得Tomcat的开发者可能嫌这样做太麻烦了,所以Tomcat6版本中将这些子项目都合并在一起了。但是,这种做法不利于我们阅读理解源代码。

附: Eclipse 关联源代码:

在eclipse的preference-->Java-->Build Path-->user library,点开想要添加的jar文件,选择“添加源文件”
分享到:
评论

相关推荐

    编译tomcat源码所需jar包

    总的来说,这些jar包构成了编译Tomcat源码的核心依赖,它们使得开发者能够顺利地构建、测试并理解Tomcat的内部机制,进一步实现个性化定制或进行问题调试。在进行这样的工作时,了解这些工具和库的内部运作原理对于...

    编译安装Tomcat

    Tomcat 是一个免费的开放源代码的 Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。 Tomcat 的特点是技术先进、性能稳定、免费,因而...

    Tomcat的jsp编译参数

    总结来说,理解和配置Tomcat的JSP编译参数是优化Java Web应用程序性能、提升开发效率和确保错误处理的关键。通过对`web.xml`的适当调整,你可以定制JSP的编译行为,使其更好地适应项目的需求。同时,了解这些参数也...

    Tomcat6 编译好的源码

    【描述】"编译好的Tomcat6的源码,导入IDE工具即可使用"意味着用户无需自行下载源码并执行编译步骤,可以直接在集成开发环境(IDE)如Eclipse、IntelliJ IDEA等中导入这个源码工程,便于理解和调试Tomcat的工作原理...

    Ant编译Tomcat源码、MyEclipse导入Tomcat源码、执行Tomcat源码启动Tomcat

    总之,Ant和MyEclipse是Java开发中的得力助手,结合使用可以方便地管理和调试Tomcat源码。通过Ant编译源码,MyEclipse导入和运行,开发者可以更深入地理解Tomcat的工作机制,并进行定制化开发。在实践中不断探索,将...

    tomcat源码编译

    - **错误处理与日志**:Tomcat的异常处理机制和日志记录系统,对于调试和监控服务器状态十分关键。 通过源码编译,开发者不仅可以掌握Tomcat的工作机制,还可以根据实际需求进行定制化开发,提升系统的稳定性和效率...

    How Tomcat Works 中文版+源码+书里面对应tomcat源码(4.1.12 5.0.18)和编译后文件

    源码的提供使得读者有机会深入到Tomcat的内部结构,理解每个组件的功能和交互方式,对于学习和调试都非常有帮助。 书中的源码与编译后的文件相对应,读者可以根据书中的讲解,对照源码进行阅读和实践。例如,可以...

    编译tomcat7.0.42结果

    4. **调试Tomcat**:编译后的结果可用于调试目的,开发者可以通过设置断点、查看日志、分析内存占用等手段来定位和解决问题。使用源码编译的优势在于,可以更方便地添加调试信息,或者修改代码以适应特定需求。 5. ...

    Tomcat 源代码调试 - 看不见的 Shell 第二式之隐藏任意 Jsp 文件1

    在深入探讨Tomcat源代码调试和“看不见的Shell第二式之隐藏任意Jsp文件”的概念之前,我们需要了解一些基础的JSP和Tomcat工作原理。 JSP(JavaServer Pages)是一种动态网页技术,允许开发者在HTML中嵌入Java代码,...

    tomcat6.x源码编译依赖的jar包

    tomcat源码调试步骤: 1.到官网下载源码,解压 2.在根目录下把build.properties.default文件名去掉后面的.default 3.把该文件中的base.path值改成你自己指定的目录 4.在根目录中运行ant download,成功后再运行ant 5....

    tomcat6.0源码及编译依赖项(可编译)

    通过深入学习Tomcat的源码,开发者不仅可以了解Web服务器的工作原理,还能提升对Java EE标准的理解,为开发、调试和优化Web应用程序提供强大支持。此外,熟悉Tomcat源码还有助于自定义Tomcat行为,满足特定的性能或...

    tomcat redis共享session 编译jar包

    标题中的“tomcat redis共享session 编译jar包”指的是在Tomcat服务器中利用Redis来实现Session的共享。这通常发生在分布式系统中,多个Tomcat实例需要共享用户的Session信息,以确保用户在不同服务器间的会话一致性...

    IDEA 开启自动编译设置步骤

    ### IDEA开启自动编译设置步骤详解 #### 一、引言 ...对于那些经常需要快速迭代和调试的应用程序来说,这是一个不可或缺的强大工具。希望本篇文章能帮助你在日常开发工作中更好地利用IDEA的自动编译功能。

    tomcat7.0 编译后的源码

    【标题】"Tomcat7.0 编译后的源码" 涵盖了Web服务器和应用服务器领域的核心知识,是Java EE开发人员深入理解Servlet容器的重要参考资料。Tomcat7.0是Apache软件基金会下的一个开源项目,它实现了Java Servlet和Java...

    原创-tomcat快速开发调试-类修改热部署

    在Java开发中,由于其编译执行的特点,相较于动态语言如PHP,进行快速迭代和调试通常需要重启应用服务器,这在Web应用开发中尤其不便。然而,通过使用像DCE VM(Dynamic Code Evolution Virtual Machine)这样的技术...

Global site tag (gtag.js) - Google Analytics