Tomcat7调试运行环境搭建与源代码分析入门

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文件在附件中)

 
 
 
 
  1.     xsi:schemaLocation=“http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd”>    
  2.     4.0.0    
  3.     
  4.     org.apache.tomcat    
  5.     Tomcat7.0    
  6.     Tomcat7.0    
  7.     7.0    
  8.     
  9.         
  10.         Tomcat7.0    
  11.         trunk/java    
  12.         trunk/test    
  13.             
  14.                 
  15.                 trunk/java    
  16.                 
  17.             
  18.             
  19.                 
  20.                 trunk/test    
  21.                 
  22.             
  23.             
  24.                 
  25.                 org.apache.maven.plugins    
  26.                 maven-compiler-plugin    
  27.                 2.3    
  28.                     
  29.                     1.6    
  30.                     1.6    
  31.                     
  32.                 
  33.             
  34.         
  35.     
  36.         
  37.             
  38.             junit    
  39.             junit    
  40.             4.4    
  41.             test    
  42.             
  43.             
  44.             org.eclipse.jdt.core.compiler    
  45.             ecj    
  46.             3.7.2    
  47.             
  48.             
  49.             ant    
  50.             ant    
  51.             1.7.0    
  52.             
  53.             
  54.             wsdl4j    
  55.             wsdl4j    
  56.             1.6.2    
  57.             
  58.             
  59.             javax.xml    
  60.             jaxrpc    
  61.             1.1    
  62.             
  63.         
  64.     
  65.     

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中显示:

 
 
 
 
  1. 2012-6-10 14:25:31 org.apache.catalina.startup.Catalina start    
  2. 信息: Server startup in 359 ms 

除上面这种方式外,这里还有一个Eclipse的launch脚本(start-tomcat7.launch (注: 在附件中)),

 
 
 
 
  1.     
  2.     
  3.     
  4.     
  5.     
  6.     
  7.     
  8.     
  9.     
  10.     
  11.     
  12.     
  13.     

可以放到D:\Tomcat7目录,然后flush一下Eclipse,在Eclipse中右击这个文件,点Run As启动Tomcat,点Debug As可以调试Tomcat。

下图是Tomcat在Eclipse中的项目布局:

最后,打开你的浏览器,输入 http://127.0.0.1:8080/examples/ 看看例子吧。

6. 简单的源代码阅读指南:

 
 
 
 
  1. 包名                    用途    
  2. =================================================    
  3. javax                 servlet/jsp/el相关的api    
  4. org.apache.catalina   tomcat自身架构    
  5. org.apache.coyote     http、ajp协议实现相关的类    
  6. org.apache.el         实现el规范    
  7. org.apache.jasper     实现jsp规范、编译jsp文件    
  8. org.apache.juli       tomcat的日志系统    
  9. org.apache.naming     jndi实现    
  10. 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的核心架构:

   

网站名称:Tomcat7调试运行环境搭建与源代码分析入门
网站路径:http://www.csdahua.cn/qtweb/news40/499990.html

网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网