Tomcat源碼運行(一)


1、源碼下載:http://archive.apache.org/dist/tomcat/tomcat-9/v9.0.33/src/

2、創建空項目:apache-tomcat

3、進入項目文件夾apache-tomcat解壓源碼包apache-tomcat-9.0.33-src.zip得到apache-tomcat-9.0.33-src文件夾

4、進入apache-tomcat-9.0.33-src文件夾,並創建一個目錄,命名為home,並將conf、webapps目錄移入home 目錄中

5、在apache-tomcat-9.0.33-src文件夾下創建pom.xml文件,內容如下:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <project xmlns="http://maven.apache.org/POM/4.0.0"
 3          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 4          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
 5 
 6     <modelVersion>4.0.0</modelVersion>
 7     <groupId>org.apache.tomcat</groupId>
 8     <artifactId>apache‐tomcat‐9.0.33‐src</artifactId>
 9     <name>Tomcat9.0</name>
10     <version>9.0</version>
11 
12     <build>
13         <finalName>Tomcat9.0</finalName>
14         <sourceDirectory>java</sourceDirectory>
15        <!-- <testSourceDirectory>test</testSourceDirectory>-->
16         <resources>
17             <resource>
18                 <directory>java</directory>
19             </resource>
20         </resources>
21 
22        <!-- <testResources>
23             <testResource>
24                 <directory>test</directory>
25             </testResource>
26         </testResources>-->
27         <plugins>
28             <plugin>
29                 <groupId>org.apache.maven.plugins</groupId>
30                 <artifactId>maven-compiler-plugin</artifactId>
31                 <version>3.5.1</version>
32                 <configuration>
33                     <encoding>UTF‐8</encoding>
34                     <source>1.8</source>
35                     <target>1.8</target>
36                 </configuration>
37             </plugin>
38         </plugins>
39     </build>
40     <dependencies>
41         <dependency>
42             <groupId>junit</groupId>
43             <artifactId>junit</artifactId>
44             <version>4.12</version>
45             <scope>test</scope>
46         </dependency>
47         <dependency>
48             <groupId>org.easymock</groupId>
49             <artifactId>easymock</artifactId>
50             <version>3.4</version>
51         </dependency>
52         <dependency>
53             <groupId>ant</groupId>
54             <artifactId>ant</artifactId>
55             <version>1.7.0</version>
56         </dependency>
57         <dependency>
58             <groupId>wsdl4j</groupId>
59             <artifactId>wsdl4j</artifactId>
60             <version>1.6.2</version>
61         </dependency>
62         <dependency>
63             <groupId>javax.xml</groupId>
64             <artifactId>jaxrpc</artifactId>
65             <version>1.1</version>
66         </dependency>
67         <dependency>
68             <groupId>org.eclipse.jdt.core.compiler</groupId>
69             <artifactId>ecj</artifactId>
70             <version>4.5.1</version>
71         </dependency>
72     </dependencies>
73 </project>
View Code

6.進入IDEA導入找到之前創建項目的目錄 點擊apache-tomcat-9.0.33-src目錄下的pom.xml文件,進行導入

7.找到啟動類Bootstrap,在 java/org/apache/catalina/startup下

8.配置啟動類 Edit Configurations 進行配置啟動類 並設置VM參數
   1. 選擇 + Application
   2. 啟動類名設置
   3. Main class選擇      一直選擇到Bootstrap類
   4. VM options設置     (更改以下1、3、4為你本機項目文件的位置)

    -Dcatalina.home=F:/IDEA_WorkSpace/apache-tomcat/apache-tomcat-9.0.33-src/home
    -Dcatalina.base=F:/IDEA_WorkSpace/apache-tomcat/apache-tomcat-9.0.33-src/home
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=F:/IDEA_WorkSpace/apache-tomcat/apache-tomcat-9.0.33-src/home/conf/logging.properties

 

 

9、編譯項目,可能會報錯
    Error:(320, 45) java: 找不到符號
    符號: 變量 VERSION_9 、10、11、12
    位置: 類 org.eclipse.jdt.internal.compiler.impl.CompilerOptions
    統一將錯誤改為VERSION_1_8即可      (或者改為你項目的JDK版本  )
10、啟動時為何控制台會有亂碼:
  原因:一般是中文編碼不匹配導致;經跟蹤,發現是ResourceBundle讀取org\apache\catalina\startup\LocalStrings_zh_CN.properties文件時沒有用utf8解碼導致;
  解決:修改org.apache.tomcat.util.res.StringManager類中的getString函數;
  由
  if (bundle != null) {
  str = bundle.getString(key);
  }
  改為
  if (bundle != null) {
  str = new String(bundle.getString(key).getBytes(“ISO-8859-1”), “UTF-8”);
  }
  再次運行,控制台無亂碼.

11.訪問頁面,但是報500錯誤  

  原因:是我們直接啟動org.apache.catalina.startup.Bootstrap的時候沒有加載JasperInitializer,從而無法編譯JSP。

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

 

  解決:找到 java/org/apache/catalina/startup下   ContextConfig 這個類

  在configureStart()方法的webConfig();    (代碼775行)下面加上

  

context.addServletContainerInitializer(new JasperInitializer(), null);

 

12.再次訪問 ,成功

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM