1. 需要准备好下面这些工具
JDK 1.6+
Maven 2或3
TortoiseSVN 1.7+ (从1.7开始".svn"目录集中放在一处了,不再每个目录下都放一份)
Eclipse 3.5+
这4个工具不在这里描述怎么配置了,如果你是有两三年开发经验的Java开发人员,正常来讲都一直在用了。
另外,分析tomcat源代码不需要对这4个工具做什么特殊配置。
2. 下载Tomcat的源代码
Apache旗下的开源项目基本上都放在这: http://svn.apache.org/repos/asf
里面包含了tomcat、struts、hadoop、hbase等流行的开源项目的源代码,
可以直接用浏览器打开这个URL,或者用TortoiseSVN的Repository Browser打开它。
tomcat的svn是: http://svn.apache.org/repos/asf/tomcat , 如下图所示:
目前tomcat有4个大分支:
5.5 : http://svn.apache.org/repos/asf/tomcat/tc5.5.x
6.0 : http://svn.apache.org/repos/asf/tomcat/tc6.0.x
7.0 : http://svn.apache.org/repos/asf/tomcat/tc7.0.x
8.0 : http://svn.apache.org/repos/asf/tomcat/trunk
5.5分支会在今年9月30号后停止维护,所以除非有历史遗留系统,不推荐再去读它的代码,
6.0分支是比较成熟的,在生产环境用得比较多,
目前官方对这个分支进入维护、bugfix阶段,很少有新功能添加进来了,
我个人也不推荐读它的代码,代码相对7.0来讲比较脏乱。
7.0分支完整实现了servlet 3.0规范,已陆续发布了27个小版本,己经稳定了,可用于生产环境,
代码比5.5、6.0分支干净整洁得多,这也是我强烈向你推荐的版本。
8.0分支主要关注web socket和spdy,正处于活跃开发阶段,代码变动比较频繁,保持关注即可。
所以这篇文章讲的是7.0分支,研究tomcat推荐直接提取svn的源代码:
用TortoiseSVN checkout这个svn的代码: http://svn.apache.org/repos/asf/tomcat/tc7.0.x/trunk
放到D:\Tomcat7\trunk (你可以换别的目录)
然后再从这下载一个二进制分发包(Binary Distributions)
http://labs.mop.com/apache-mirror/tomcat/tomcat-7/v7.0.27/bin/apache-tomcat-7.0.27.zip
解压后放到D:\Tomcat7,顺便把"apache-tomcat-7.0.27"重命名成launch吧,
用这个二进制分发包而不是从源代码构建只是为了节省时间,
直接用它conf目录里面的配置文件和webapps下的例子。
3. 把它变成maven工程
主要是添加几个依赖(ecj、ant、jaxrpc等),否则的话导入eclipse后会有编译错误,
另外,因为tomcat不是标准的maven工程项目,比如没有src\main\java这样的目录,
所以要调整一下sourceDirectory和testSourceDirectory,下面是一个完整的pom文件,
直接放到D:\Tomcat7目录即可(pom.xml与之前的launch、trunk目录并列)
(注: pom.xml文件在附件中)
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>org.apache.tomcat</groupId> <artifactId>Tomcat7.0</artifactId> <name>Tomcat7.0</name> <version>7.0</version> <build> <finalName>Tomcat7.0</finalName> <sourceDirectory>trunk/java</sourceDirectory> <testSourceDirectory>trunk/test</testSourceDirectory> <resources> <resource> <directory>trunk/java</directory> </resource> </resources> <testResources> <testResource> <directory>trunk/test</directory> </testResource> </testResources> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.3</version> <configuration> <source>1.6</source> <target>1.6</target> </configuration> </plugin> </plugins> </build> <dependencies> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.4</version> <scope>test</scope> </dependency> <dependency> <groupId>org.eclipse.jdt.core.compiler</groupId> <artifactId>ecj</artifactId> <version>3.7.2</version> </dependency> <dependency> <groupId>ant</groupId> <artifactId>ant</artifactId> <version>1.7.0</version> </dependency> <dependency> <groupId>wsdl4j</groupId> <artifactId>wsdl4j</artifactId> <version>1.6.2</version> </dependency> <dependency> <groupId>javax.xml</groupId> <artifactId>jaxrpc</artifactId> <version>1.1</version> </dependency> </dependencies> </project>
4. 导入Eclipse
在命令行窗口中进入D:\Tomcat7目录,执行 mvn eclipse:eclipse 就可以转成eclipse工程项目了,
然后打开eclipse,点"File->Import->General->Existing Projects into Workspace",
最后打开D:\Tomcat7就能看到Tomcat7.0这个项目了。
(如果eclipse装了m2e插件不用执行mvn eclipse:eclipse的,可以直接导入maven工程)
5. 在Eclipse中让Tomcat跑起来
在Eclipse中打开org.apache.catalina.startup.Bootstrap类,
在编辑区右击,点"Run As->Run configurations",然后双击"Java Aplication"就会出来一个新的"Bootstrap",
选中它,在右边点击"Arguments"那一栏,把下面的内容copy到"VM arguments"中:
-Dcatalina.home=launch -Dcatalina.base=launch -Djava.endorsed.dirs=launch/endorsed -Djava.io.tmpdir=launch/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=launch/conf/logging.properties
如下图:
然后点run按钮,就可以启动tomcat了,启动成功会在Eclipse的console中显示:
2012-6-10 14:25:31 org.apache.catalina.startup.Catalina start
信息: Server startup in 359 ms
除上面这种方式外,这里还有一个Eclipse的launch脚本 (start-tomcat7.launch (注: 在附件中) ) ,
<?xml version="1.0" encoding="UTF-8" standalone="no"?> <launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication"> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS"> <listEntry value="/Tomcat7.0/trunk/java/org/apache/catalina/startup/Bootstrap.java"/> </listAttribute> <listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES"> <listEntry value="1"/> </listAttribute> <stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.apache.catalina.startup.Bootstrap"/> <stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="start"/> <stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="Tomcat7.0"/> <stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dcatalina.home=launch -Dcatalina.base=launch -Djava.endorsed.dirs=launch/endorsed -Djava.io.tmpdir=launch/temp -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=launch/conf/logging.properties"/> </launchConfiguration>
可以放到D:\Tomcat7目录,然后flush一下Eclipse,在Eclipse中右击这个文件,点Run As启动Tomcat,点Debug As可以调试Tomcat。
下图是Tomcat在Eclipse中的项目布局:
最后,打开你的浏览器,输入 http://127.0.0.1:8080/examples/ 看看例子吧。
6. 简单的源代码阅读指南:
包名 用途
=================================================
javax servlet/jsp/el相关的api
org.apache.catalina tomcat自身架构
org.apache.coyote http、ajp协议实现相关的类
org.apache.el 实现el规范
org.apache.jasper 实现jsp规范、编译jsp文件
org.apache.juli tomcat的日志系统
org.apache.naming jndi实现
org.apache.tomcat tomcat的工具包、net、digester xml解析器
阅读顺序:
可以从org.apache.catalina.startup.Bootstrap这个类开始看起,
然后到org.apache.catalina.startup.Catalina,
在Catalina类中会触发conf/server.xml文件的解析,
这时要看org.apache.tomcat.util.digester中的类,
解析的过程中会用到org.apache.catalina.startup包中的很多RuleSet类,
server.xml文件解析完后,会生成org.apache.catalina.core包中的各种StandardXXX类的实例,
比如StandardServer、StandardService、StandardEngine等等,
这些Standard组件都是有生命周期的,接着会调用他们的init、start等方法,
会触发下面这些组件进入init、start状态
org.apache.catalina.connector.Connector
org.apache.coyote.http11.Http11Protocol
org.apache.tomcat.util.net.JIoEndpoint
在JIoEndpoint(或NioEndpoint、AprEndpoint)中会监听8080这样的端口,
有请求进来了,就进行相关的io操作,接着转到org.apache.coyote包中的相应类进行协议解析,
生成org.apache.catalina.connector.Request和org.apache.catalina.connector.Response实例,
然后转到各种Valve、应用Filter,最后到达应用的Servlet/JSP。
下图描述了Tomcat7的核心架构:
相关推荐
1.资源包内含有基础环境搭建、源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行,项目导入与运行视频:https://www.bilibili.com/video/BV1PR4y1N7Ck/ 2.项目运行依赖于JDK、IDEA、Tomcat、...
1.资源包内含有基础环境搭建、源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行,项目导入与运行视频:https://www.bilibili.com/video/BV1R34y1a73Q/ 2.项目运行依赖于JDK、IDEA、Tomcat、...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行,本站资源介绍: https://atyouqidian.blog.csdn.net/article/details/125131698 2.项目运行依赖于JDK、IDEA、Tomcat、Maven、...
1.资源包内含有基础环境搭建、源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行,项目导入与运行视频 https://www.bilibili.com/video/BV1v44y1V7TE 2.项目运行依赖于JDK、IDEA、Tomcat、...
1.资源包内含有源码、数据库脚本、项目配置与运行教程、高质量论文范文、毕业论文撰写视频教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
Eclipse开发入门与项目实践 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 Eclipse开发入门与项目实践 源代码 第一部分 开发入门 第1章 Eclipse概述及开发环境搭建 2 1.1 Eclipse概述 2...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
1.资源包内含有基础环境搭建、源码、数据库脚本、项目配置与运行教程,论文撰写教程,项目经过严格调试,100%能运行,项目导入与运行视频:https://www.bilibili.com/video/BV1nF411F7yj 2.项目运行依赖于JDK、IDEA...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
1.资源包内含有源码、数据库脚本、项目配置与运行教程,项目经过严格调试,100%能运行。 2.项目运行依赖于JDK、IDEA、Tomcat、MySQL等,需要安装和配置, 参考B站视频合集(项目运行环境搭建 ...
这些源代码全部经过精心调试,能够在Windows XP、WindowsServer2003及Windows7操作系统下编译和运行。 《Java Web编程宝典(十年典藏版)》适用于Java Web的初学者、编程爱好者,同时也可以作为培训机构、大中专院校...
7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit 8.3 JUnit的使用方法 8.3.1...
│ 淘淘商城源代码.zip │ ├─01.第一天 │ 01.课程计划.avi │ 02.淘淘商城介绍.avi │ 03.创建后台工程-taotao-parent.avi │ 04.创建taotao-manager.avi │ 05.svn的使用.avi │ 06.ssm框架整合思路.avi │ 07....
7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit 8.3 JUnit的使用方法 8.3.1...
7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit 8.3 JUnit的使用方法 8.3.1...
7.3.3 编译源代码 7.3.4 创建JAR文件 7.4 小结 第八章 JUnit使用指南 8.1 JUnit介绍 8.1.1 JUnit简介 8.1.2 为什么要使用JUnit 8.2 建立JUnit的开发环境 8.2.1 下载JUnit 8.2.2 配置JUnit 8.3 JUnit的使用方法 8.3.1...