Tomcat源码阅读环境搭建
    		       		warning:
    		            这篇文章距离上次修改已过1970天,其中的内容可能已经有所变动。
    		        
        		                
                最近正在学习Tomcat架构,感觉自己懂了,其实只是感觉。学习这东西到底还是得自己动手去试试。
本篇文章就是记录一下我搭建Tomcat源码阅读环境的过程,和其中踩的坑。
info:本文为《Tomcat源码架构笔记》的配套文章。
下载Tomcat源码包
首先访问Tomcat官网,在左侧侧边栏中选择需要的Tomcat版本,来进入下载页面。
 选择需要下载的Tomcat版本
选择需要下载的Tomcat版本 这里我选择Tomcat8.5
这里我选择Tomcat8.5这里我选择下载Tomcat8.5 源码和二进制文件,方便对照观察。
 下载好的源码和二进制文件(解压过程略)
下载好的源码和二进制文件(解压过程略)为源码添加pom.xml
在源码中新建maven工程的配置文件pom.xml,其内容如下。
相关的maven包信息可以到这里找到:https://mvnrepository.com/ 
<?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>apache-tomcat- 8.5.55-src</artifactId>
    <name>Tomcat8.5</name>
    <version>8.5</version>
    <build>
        <!--指定源目录-->
        <finalName>Tomcat8.5</finalName>
        <sourceDirectory>java</sourceDirectory>
        <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>3.1</version>
                <configuration>
                    <encoding>UTF-8</encoding>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <!--远程过车调用工具包-->
        <dependency>
            <groupId>javax.xml</groupId>
            <artifactId>jaxrpc</artifactId>
            <version>1.1</version>
        </dependency>
        <!--soap协议处理工具包-->
        <dependency>
            <groupId>javax.xml.soap</groupId>
            <artifactId>javax.xml.soap-api</artifactId>
            <version>1.4.0</version>
        </dependency>
        <!--解析webService的wsdl工具-->
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
        </dependency>
        <!--eclipse java编译器-->
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.5.1</version>
        </dependency>
        <!--ant管理工具-->
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.0</version>
        </dependency>
        <!--easymock辅助单元测试-->
        <dependency>
            <groupId>org.easymock</groupId>
            <artifactId>easymock</artifactId>
            <version>3.4</version>
        </dependency>
        <!--添加单元测试框架-->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>移动部分目录
 创建资源文件夹source
创建资源文件夹source 将conf(配置文件目录)和webapps目录移动到此处
将conf(配置文件目录)和webapps目录移动到此处导入项目到IDEA中
 导入项目到IDEA中
导入项目到IDEA中等待maven自动下载依赖。
 maven自动下载的依赖包
maven自动下载的依赖包配置Tomcat启动参数
| Tomcat软件模式 | Tomcat源代码模式 | 
|---|---|
| Tomcat软件(jar形式) | Tomcat源代码(导入开发环境运行) | 
| conf配置 | conf配置(需要手工指定文件位置) | 
| webapps | webapps(需要手工指定文件位置) | 
 新建一个运行/调试配置
新建一个运行/调试配置 配置主类为Bootstrap
配置主类为Bootstrap 配置虚拟机参数(点击箭头可以展开)
配置虚拟机参数(点击箭头可以展开)# 使用时请去掉注释
# 指定安装路径
-Dcatalina.home=/home/ding/tool/apache-tomcat-8.5.55-src/source/
# 指定工作路径
-Dcatalina.base=/home/ding/tool/apache-tomcat-8.5.55-src/source/
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
# 指定日志配置文件路径
-Djava.util.logging.config.file=/home/ding/tool/apache-tomcat-8.5.55-src/source/conf/logging.properties 指定模块路径并保存
指定模块路径并保存添加初始化jsp引擎语句
//初始化jsp引擎
context.addServletContainerInitializer(new JasperInitializer(),null); 添加初始化jsp引擎语句,防止启动Tomcat时出现500错误
添加初始化jsp引擎语句,防止启动Tomcat时出现500错误注释测试单元代码
如果出现下面的错误,可以考虑此步骤
Error:(29, 36) java: 找不到符号
  符号:   变量 CookieFilter
  位置: 类 util.TestCookieFilter
Error:(35, 40) java: 找不到符号
  符号:   变量 CookieFilter
  位置: 类 util.TestCookieFilter
Error:(42, 17) java: 找不到符号
  符号:   变量 CookieFilter
  位置: 类 util.TestCookieFilter 注释此文件下所有代码
注释此文件下所有代码关于控制台的乱码问题
添加启动参数,设置地区语言为en
-Dfile.encoding=UTF-8
-Duser.language=en
-Duser.region=US 添加启动参数,设置地区语言为en
添加启动参数,设置地区语言为eninfo:进入StringManager sm变量发现,local为zh_cn时,启用的属性文件本身的编码就是乱码。
本部分参考:
@zhoutaoping1992 的《记一次tomcat源码启动控制台中文乱码问题调试过程》
@一天不进步,就是退步的《编译Tomcat9源码及tomcat乱码问题解决》
其他一些错误
错误:osgi: [apache-tomcat-8.5.55-src] Invalid value for Bundle-Version, @VERSION@ does not match [0-9]{1,9}(\.[0-9]{1,9}(\.[0-9]{1,9}(\.[0-9A-Za-z_-]+)?)?)? 修改Bundle-Version为8
修改Bundle-Version为8启动
 启动成功
启动成功