一、本篇目錄
- tomcat簡(jiǎn)介
- tomcat目錄結(jié)構(gòu)
- tomcat源碼調(diào)試
二、tomcat簡(jiǎn)介
兩句話簡(jiǎn)單介紹下:
Tomcat是Apache 軟件基金會(huì)(Apache Software Foundation)的Jakarta 項(xiàng)目中的一個(gè)核心項(xiàng)目,由Apache、Sun 和其他一些公司及個(gè)人共同開(kāi)發(fā)而成。
它是一個(gè)小型的輕量級(jí)應(yīng)用服務(wù)器,在中小型系統(tǒng)和并發(fā)訪問(wèn)用戶不是很多的場(chǎng)合下被普遍使用,是開(kāi)發(fā)和調(diào)試JSP 程序的首選。
三、tomcat目錄結(jié)構(gòu)
tomcat的下載安裝有很多教程,不再贅述。
現(xiàn)在的tomcat已經(jīng)到9了,當(dāng)tomcat下載安裝完成后,其目錄大致如下:

除了上面的文件夾,還有四個(gè)文件:

先介紹后4個(gè)文件:
- LICENSE:就是許可證,里面記錄了tomcat的一些條款等等。
- NOTICE:里面記錄了tomcat的新的通知,公告。
- RELEASE-NOTES:里面記錄的是發(fā)行版本的說(shuō)明,一些捆綁的API,新特性等等。
- RUNNING.txt:記錄了tomcat的運(yùn)行環(huán)境以及怎樣配置參數(shù),變量,啟動(dòng)等等。
再介紹文件夾(并不全):
3.1、bin文件夾
bin文件夾下面放的是可執(zhí)行性文件,其中:bat/exe文件是Windows下可執(zhí)行的腳本文件。sh文件時(shí)Linux/Unix下可執(zhí)行的腳本文件。
- bootstrap.jar:這個(gè)jar包是引導(dǎo)程序jar包,是tomcat的入口。
- catalina.bat:一個(gè)重要腳本,這個(gè)腳本完成了很多基本操作,如啟動(dòng)、關(guān)閉等,catalina.bat都參與其中,Windows中運(yùn)行。
- catalina.sh:文件作用同catalina.bat,在Linux/Unix系統(tǒng)下運(yùn)行。
- catalina-tasks.xml:配置文件,主要是引入各種jar包。
- configtest.bat:檢測(cè)語(yǔ)法是否正確的腳本文件。
- configtest.sh:同上。
- service.bat:?jiǎn)?dòng)tomcat服務(wù)。和注冊(cè)tomcat服務(wù)那塊有關(guān)系。
- setclasspath.bat:設(shè)置classpath的腳本,在catalin.bat腳本中調(diào)用,可以設(shè)置java_home,jre_home等。
- shutdown.bat:主要是檢查catalina.bat執(zhí)行所需環(huán)境,并調(diào)用catalina.bat批處理文件關(guān)閉tomcat服務(wù)。
- startup.bat:主要是檢查catalina.bat執(zhí)行所需環(huán)境,并調(diào)用catalina.bat 批處理文件啟動(dòng)tomcat服務(wù)。
- tcnative-1.dll:加速器組件,可以提高性能。
- tomcat-native.tar.gz:里面放的是tomcat本地的library。
- tool-wrapper.bat:工具包裝腳本。
- version.bat:一般是用來(lái)判斷系統(tǒng)版本獲取系統(tǒng)版本信息等。
3.1、conf文件夾
存放tomcat服務(wù)器的配置文件。
- catalina.policy:當(dāng)Tomcat在安全模式下運(yùn)行,此文件為默認(rèn)的安全策略配置。
- catalina.properties:catalina環(huán)境變量配置。
- context.xml:用于定義所有Web應(yīng)用均需要加載的Context配置,如果Web應(yīng)用指定了自己的context.xml,那么該文件的配置會(huì)被覆蓋。
- logging.properties:日志配置文件,可修改日志級(jí)別和日志路徑等。
- server.xml:核心配置文件,用于配置鏈接器、監(jiān)聽(tīng)端口、處理請(qǐng)求的虛擬主機(jī)等,可以說(shuō),tomcat根據(jù)該配置文件創(chuàng)建服務(wù)器實(shí)例。
- tomcat-users.xml:tomcat配置用戶的文件,用于定義tomcat默認(rèn)用戶及角色映射信息,tomcat的manage模塊使用該文件中定義的用戶進(jìn)行安全認(rèn)證。
- web.xml:tomcat中所有應(yīng)用默認(rèn)的部署描述文件,主要定義了基礎(chǔ)Servlet和MIME映射,如果應(yīng)用中不包含web.xml,tomcat將使用此文件初始化部署描述,反之,tomcat會(huì)將默認(rèn)部署描述與自定義配置進(jìn)行合并。
server.xml文件重點(diǎn)關(guān)注一下:

里面詳細(xì)配置可以參考這篇文章:
server.xml配置詳解
3.3、lib文件夾
tomcat依賴庫(kù)目錄,包含tomcat服務(wù)器運(yùn)行環(huán)境依賴jar包。
3.4、logs文件夾
默認(rèn)的日志存放文件夾。
3.5、webapps文件夾
默認(rèn)的web應(yīng)用部署目錄。
3.6、work文件夾
web應(yīng)用jsp代碼生成和編譯臨時(shí)目錄。清空work目錄,然后重啟tomcat,可以達(dá)到清除緩存的作用。sp文件在被翻譯后,保存在當(dāng)前這個(gè)目錄下,session對(duì)象被序列化之后保存的位置。
四、tomcat源碼調(diào)試
前面對(duì)tomcat做了一些簡(jiǎn)單的認(rèn)識(shí),下面將tomcat源碼調(diào)試環(huán)境搭建起來(lái)。
可以參考官網(wǎng)的搭建方法,這里是按照網(wǎng)上的maven管理的方式搭建。
大概步驟是:
1.下載tomcat 9的源碼,一般是下載頁(yè)面最底部的tar包或zip包源碼;
2.然后解壓在文件夾下新建pom.xml,內(nèi)容大致如下:
<?xml version="1.0" encoding="UTF-8"?>
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>me.w1992wishes.tomcatwork</groupId>
<artifactId>Tomcat9.0</artifactId>
<name>Tomcat9</name>
<version>9.0</version>
<build>
<finalName>Tomcat9</finalName>
<sourceDirectory>java</sourceDirectory>
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-apache-log4j</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant-commons-logging</artifactId>
<version>1.9.5</version>
</dependency>
<dependency>
<groupId>javax.xml.rpc</groupId>
<artifactId>javax.xml.rpc-api</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.4</version>
</dependency>
</dependencies>
</project>
3.接著導(dǎo)入idea,設(shè)置啟動(dòng)項(xiàng):
Main Class:org.apache.catalina.startup.Bootstrap;
VM options:填寫(xiě)解壓的tomcat路徑;

4.因?yàn)閣ebapps下的應(yīng)用有些配置加載出錯(cuò),可以先將webapps里面的文件全部刪除,自己新建一個(gè)demo文件夾,然后在里面新建一個(gè)index.html,并不影響源碼閱讀。
5.JDTCompiler.java類(lèi)中可能會(huì)有報(bào)錯(cuò),有部分代碼使用CompilerOptions.VERSION_1_9來(lái)判斷java虛擬機(jī)版本,里面涉及1.9版本的jvm,如果識(shí)別不了,可以刪掉。
6.最后編譯,運(yùn)行,訪問(wèn)localhost:8080/demo。
詳過(guò)程可以參考這篇博文: