使用的idea版本2017、maven3.5(如果maven版本高於3.5那么可能會存在導入maven項目的時候出錯,這是由於idea版本過低的緣故)、jdk1.8,tomcat源碼8.5
1、准備jdk環境
2、准備maven環境
3、准備idea環境
4、下載tomcat源碼
官網下載地址: http://tomcat.apache.org/
瀏覽器打開地址后左側download下選擇相應的下載版本進入如下界面:
可以選擇源碼包進行下載。
Github下載地址:https://github.com/apache/tomcat/tree/master
5、導入項目前的准備工作
將下載下來的源碼項目解壓,在解壓后的根目錄下新建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>Tomcat8</artifactId>
<name>Tomcat8</name>
<version>8</version>
<build>
<finalName>Tomcat8.0</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>
<!--easymock用於模擬HttpServletRequest對象從而使測試順利進行-->
<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>
<!--解析WSDL文件-->
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.2</version>
</dependency>
<!--添加jaxrpc依賴-->
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<!--jsp編譯器依賴-->
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.5.1</version>
</dependency>
<!--添加soap依賴-->
<dependency>
<groupId>javax.xml.soap</groupId>
<artifactId>javax.xml.soap-api</artifactId>
<version>1.4.0</version>
</dependency>
</dependencies>
</project>
在根目錄下新建catalina-home文件夾,將webapps與conf截切進去,這是因為在后續的VM options參數設置的時候方便值入參數。
點擊idea的open鍵選擇pom.xml導入項目。選擇pom文件后需要堅持maven的配置是否正確,如果不正確需要修改pom的配置后重新下載依賴。
6、搭建源碼項目
配置項目啟動項,點擊idea工具欄選擇Edit Configurations配置啟動項,界面如下圖所示:
點擊+號選擇application啟動項,主要配置如下2個參數:
Main class:啟動主類,包含了一個main方法,具體參數 org.apache.catalina.startup.Bootstrap
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
Ps:${源碼項目根目錄}需要自己手動更改
注釋掉TestCookieFilter中的所有方法。注釋原因如下:
因為在pom中引入了test測試,所有在類中使用的CookieFilter找不到。
初始化jsp解析器。在ContextConfig的configureStart方法中初始化jsp解析器,並將其注入環境中。代碼如下:
context.addServletContainerInitializer(new JasperInitializer(), null);
如果不初始化jsp解析器那么在瀏覽器中輸入localhost:8080時會提示如下錯誤:
org.apache.jasper.JasperException: java.lang.NullPointerException
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:598)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:514)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:386)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:330)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)