一直在使用tomcat,但却不怎么熟悉tomcat的“运作流程”,今天就

参照参考文章进行了代码搭建(代码的github在文末),并修改了一些操作。学习下tomcat的“运作流程”,后续还会有文章对“运作流程”进行分析。

下载tomcat的源码,配置项目

不是tomcat用于部署项目的那个版本!是源码(本文中用的是tomcat7.0.67),

下载地址

解压tomcat,在根目录下新建一个home目录和一个pom.xml:

pom.xml:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6. <groupId>org.apache.tomcat</groupId>
  7. <artifactId>Tomcat7.0.67</artifactId>
  8. <name>Tomcat7.0.67</name>
  9. <version>7.0</version>
  10. <properties>
  11. <java.version>1.7</java.version>
  12. </properties>
  13. <dependencies>
  14. <dependency>
  15. <groupId>ant</groupId>
  16. <artifactId>ant</artifactId>
  17. <version>1.7.0</version>
  18. </dependency>
  19. <dependency>
  20. <groupId>ant</groupId>
  21. <artifactId>ant-apache-log4j</artifactId>
  22. <version>1.6.5</version>
  23. </dependency>
  24. <dependency>
  25. <groupId>ant</groupId>
  26. <artifactId>ant-commons-logging</artifactId>
  27. <version>1.6.5</version>
  28. </dependency>
  29. <dependency>
  30. <groupId>wsdl4j</groupId>
  31. <artifactId>wsdl4j</artifactId>
  32. <version>1.6.2</version>
  33. </dependency>
  34. <dependency>
  35. <groupId>javax.xml.rpc</groupId>
  36. <artifactId>javax.xml.rpc-api</artifactId>
  37. <version>1.1</version>
  38. </dependency>
  39. <dependency>
  40. <groupId>org.eclipse.jdt.core.compiler</groupId>
  41. <artifactId>ecj</artifactId>
  42. <version>4.5.1</version>
  43. </dependency>
  44. <dependency>
  45. <groupId>junit</groupId>
  46. <artifactId>junit</artifactId>
  47. <version>4.12</version>
  48. <scope>test</scope>
  49. </dependency>
  50. </dependencies>
  51. <build>
  52. <finalName>Tomcat7.0</finalName>
  53. <sourceDirectory>java</sourceDirectory>
  54. <resources>
  55. <resource>
  56. <directory>java</directory>
  57. </resource>
  58. </resources>
  59. <plugins>
  60. <plugin>
  61. <groupId>org.apache.maven.plugins</groupId>
  62. <artifactId>maven-compiler-plugin</artifactId>
  63. <version>3.5</version>
  64. <configuration>
  65. <encoding>UTF-8</encoding>
  66. <source>${java.version}</source>
  67. <target>${java.version}</target>
  68. </configuration>
  69. </plugin>
  70. </plugins>
  71. </build>
  72. </project>

将webapps目录和conf目录剪切至home目录下,并在home目录下添加lib、work和logs目录如下图:

使用IDEA打开项目(File>Open)

等项目加载完后,在run/debug configuration 中创建一个Application用于启动tomcat:





MainClass填写org.apache.catalina.startup.Bootstrap

VM options填写-Dcatalina.home=”F:\xxx\home”

F:\xxx\home为你之前home目录完整路径

若下载的tomcat不是源码版,会找不到bootstrap类如下图:

小错误

运行项目后会出现下面的错误(但是可以访问http://localhost:8080,不影响调试tomcat):出于强迫症,还是解决下这些错误。



解决的思路:直接搜(Ctrl+shift+n)ContextListener 这个类,发现路径都是在webapps/example中的





而webapps目录下的都是tomcat自带的项目,于是我就试着将home/webapps目录下的example删除了:

没想到再运行项目就不报上面的错了:)

完整代码

学习tomcat(一)----用IDEA调试tomcat源码的更多相关文章

  1. Tomcat系列(二)- EndPoint源码解析

    在上一节中我们描述了Tomcat的整体架构, 我们知道了Tomcat分为两个大组件,一个连接器和一个容器. 而我们这次要讲的 EndPoint的组件就是属于连接器里面的. 它是一个通信的端点,就是负责 ...

  2. 比特币学习笔记(二)---在windows下调试比特币源码

    根据我一贯的学习经验,学习开源代码的话,单单看是不够的,必须一边看一边调试才能尽快理解,所以我们要想法搭建windows下bitcoin源码的调试环境. 紧接着昨天的进度,想要调试linux下的比特币 ...

  3. Android动态方式破解apk进阶篇(IDA调试so源码)

    一.前言 今天我们继续来看破解apk的相关知识,在前一篇:Eclipse动态调试smali源码破解apk 我们今天主要来看如何使用IDA来调试Android中的native源码,因为现在一些app,为 ...

  4. 使用VS2012调试ReactOS源码

    目录 一 下载并安装VS2012 二 下载并安装WDK80 三 下载ReactOS0315源码 四 下载并安装RosBE211 五 用RosBE命令行编译ReactOS源码 六 用VS2012编译nt ...

  5. vs2013 调试libevent 源码

    自己内功的提升,无非是向前辈学习和修炼自身,对于编码也是如此,学习优秀的库只有从 源代码学起,才能深刻理解库实现的来龙去脉,加深自己的理解,提升自己的功力. 今天就介绍一下vs2013 下面调试lib ...

  6. Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码)

    Android逆向之旅---动态方式破解apk进阶篇(IDA调试so源码) 来源 https://blog.csdn.net/jiangwei0910410003/article/details/51 ...

  7. 使用“Cocos引擎”创建的cpp工程如何在VS中调试Cocos2d-x源码

    前段时间Cocos2d-x更新了一个Cocos引擎,这是一个集合源码,IDE,Studio这一家老小的整合包,我们可以使用这个Cocos引擎来创建我们的项目. 在Cocos2d-x被整合到Cocos引 ...

  8. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  9. Apache Spark源码走读之18 -- 使用Intellij idea调试Spark源码

    欢迎转载,转载请注明出处,徽沪一郎. 概要 上篇博文讲述了如何通过修改源码来查看调用堆栈,尽管也很实用,但每修改一次都需要编译,花费的时间不少,效率不高,而且属于侵入性的修改,不优雅.本篇讲述如何使用 ...

  10. eclipse调试jdk源码

    摘要 介绍使用eclipse调试jdk源码 java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debu ...

随机推荐

  1. wkhtmltopdf Windows下 测试demo 成功

    html2pdf 转pdf 中文不换行 然后找到了wkhtmltopdf 支持中文换行 样式也支持 在PHP中生成PDF文件,可以使用 FPDF 和 TCPDF .但是它们只能用于创建简单的表格,当涉 ...

  2. win iso download

    http://rufus.akeo.ie/ window iso download http://win.86tyu.cn/ylmf32win7.html

  3. CentOS7.6安装Nodejs(Npm)

    官网下载地址:https://nodejs.org/en/download/ 第一步:软件下载安装 进行安装目录:cd /opt/software (如果目录不存在,请先创建目录) 下载二进制包:wg ...

  4. PHP编译安装系列

    徐亮伟, 江湖人称标杆徐.多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作.擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作. 个人博客"徐亮伟架构师之路&quo ...

  5. C# WinForm启动时的事件加载次序

  6. Python基础学习九 单元测试

    import unittest import HTMLTestRunner #产生测试报告 from BeautifulReport import BeautifulReport def calc(x ...

  7. pycharm打开脚本报错Gtk-Message: Failed to load module "canberra-gtk-module"

    解决方法 sudo apt-get install libcanberra-gtk-module

  8. C# Common Keyword II

    [C# Common Keyword II] 1.as 运算符用于在兼容的引用类型之间执行某些类型的转换. class csrefKeywordsOperators { class Base { pu ...

  9. 把http网站改为Https网站

    腾讯云申请完证书后添加到服务器的方法: https://www.qcloud.com/document/product/400/4143#2.-nginx.E8.AF.81.E4.B9.A6.E9.8 ...

  10. Eclipse创建javaWeb项目工程

    首先,想作为一个较为标准的程序员,应该把自己的开发工具eclipse设置成与公司中大多数程序员的设置一样,比如说工作的字符编码为UTF-8,字体大小等等. 在刚下载好的eclipse中刚进去是没有To ...