Idea導入Tomcat源碼

一、源碼準備

Tomcat官網下載源碼(點我下載),如圖。

二、Idea導入

  1. 解壓下載好的apache-tomcat-8.5.43-src.zip文件。
  2. 在解壓好的目錄中創建catalina-home目錄,並將目錄中的conf和webapps文件夾複製到catalina-home目錄中。

三、maven支持

1、用Idea打開此目錄,並添加maven支持。右鍵工程→Add Framework Suppot,選擇maven。

2、修改pom.xml,內容如下:

<?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>org.apache.tomcat</groupId>
    <artifactId>Tomcat</artifactId>
    <name>Tomcat</name>
    <version>8.5</version>
    <build>
        <finalName>Tomcat8.5</finalName>
        <sourceDirectory>java</sourceDirectory>
        <testSourceDirectory>test</testSourceDirectory>
        <resources>
            <resource>
                <directory>java</directory>
            </resource>
        </resources>
        <testResources>
            <testResource>
                <directory>test</directory>
            </testResource>
        </testResources>
        <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>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>3.4</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>
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.5.1</version>
        </dependency>
    </dependencies>

</project>

3、若編譯build過程中,出現Test測試代碼報錯,註釋該代碼即可。Tomcat源碼util.TestCookieFilter類會報錯,將其註釋即可

四、參數配置並啓動運行

1、運行org.apache.catalina.startup.Bootstrap類的main方法啓動,並配置VM options參數。

VM options參數如下:
-Dcatalina.home=catalina-home
-Dcatalina.base=catalina-home
-Djava.endorsed.dirs=catalina-home/endorsed
-Djava.io.tmpdir=catalina-home/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=catalina-home/conf/logging.properties

2 、啓動後,在瀏覽器訪問http://localhost:8080,結果如圖:

五、報錯調整

若運行main方法之後,訪問頁面,出現如下圖所以錯誤,是由於啓動org.apache.catalina.startup.Bootstrap的時候沒有加載org.apache.jasper.servlet.JasperInitializer,從而無法編譯JSP。

解決辦法是在tomcat的源碼org.apache.catalina.startup.ContextConfig中的configureStart函數中手動將JSP解析器初始化:

添加代碼:context.addServletContainerInitializer(new JasperInitializer(), null);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章