日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2025/3/19 编程问答 18 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:Tomcat7trunk (你可以換別的目錄)

然后再從這下載一個二進制分發包(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工程項目,比如沒有srcmainjava這樣的目錄,

所以要調整一下sourceDirectory和testSourceDirectory,下面是一個完整的pom文件,

直接放到D:Tomcat7目錄即可(pom.xml與之前的launch、trunk目錄并列)

(注: pom.xml文件在附件中)


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



    Java代碼
  • 2012-6-10?14:25:31?org.apache.catalina.startup.Catalina start
  • 信息: Server startup in?359?ms?



  • 除上面這種方式外,這里還有一個Eclipse的launch腳本(start-tomcat7.launch?(注: 在附件中))
    Xml代碼

    <?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。

    最后,打開你的瀏覽器,輸入?http://127.0.0.1:8080/examples/?看看例子吧。

    6. 簡單的源代碼閱讀指南:



    Java代碼
  • 包名 用途
  • =================================================
  • 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。

    本文來源于"阿里中間件團隊播客",原文發表時間"?2012-06-12"

    總結

    以上是生活随笔為你收集整理的Tomcat7调试运行环境搭建与源代码分析入门的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。