一直在使用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. SET STATISTICS IO

    SET STATISTICS IO (Transact-SQL) https://technet.microsoft.com/zh-cn/library/ms184361(SQL.90).aspx 如 ...

  2. Android:自定义Sqlite数据库路径

    默认的sqlite数据库是放在/data/data/database目录下的,今天看腾讯云IM的demo发现再该路径下找不到它存放消息的数据库,找了下后发现居然是放在/data/data/files目 ...

  3. WebService与WCF

    5.Web Service和WCF的到底有什么区别 https://zhidao.baidu.com/question/1368120490988718179.html 6.VS 2010中使用C#创 ...

  4. TCP报文大小

    链路层(二层)MTU最大传输单元:1500KByte.每个以太网帧64bytes-1518bytes,减去帧头(DMAC目的MAC地址48bit=6Bytes+SMAC源MAC地址48bit=6Byt ...

  5. Mysql Windows 7 异常关闭, 2003 - Can't connect to Mysql server on 'localhost' (10061) "Unknown error")

    如下: 按Win+R在窗口输入services.msc 启动mysql服务

  6. JBPM4.4学习笔记

    1.JBPM4表说明: JBPM4_DEPLOYMENT 流程定义表 JBPM4_DEPLOYPROP 流程定义属性表 JBPM4_EXECUTION 流程实例表 JBPM4_HIST_ACTINST ...

  7. mysql update更新带子查询的实现方式

    现在要做一下数据移植,需要更新相关的数据,需要在mysql中更新时不能将更新的表作为查询的表. 总结一下: 一:单表更新时 例如: update customer set category = 1 W ...

  8. 4.Hadoop集群搭建之启动

    配置好Hadoop.HDFS.YARN.Zookeeper集群后,需要按照顺序启动. 前期准备 配置好Hadoop.HDFS.YARN.Zookeeper集群 先stop掉所有的hadoop服务 使用 ...

  9. Linux实战教学笔记26:http协议原理

    目录 第二十六节 http协议原理 第1章 Web服务基础 1.1 http服务重要基础 1.2 HTTP协议 1.3 HTTP资源 1.4 网站流量度量术语 1.5 www服务软件介绍 1.6 本章 ...

  10. 利用jekyll架设个人博客

    jekyll简介 jekyll是一种可以将Markdown或Textile格式文本文件转换成静态网页的工具.利用jekyll编写发布博客的基本过程为: 使用任何一款编辑器编写符合Markdown或Te ...