IDEA运行Tomcat8.5.x源码
准备
-
jdk1.8+环境
-
Maven环境
-
IDEA
-
tomcat源码,GitHub&Tomcat官网均可,
参考下载地址:
添加pom.xml&catalina-home目录
- 在源码根目录添加pom.xml(依赖maven进行构建)
<?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.5</artifactId>
<name>Tomcat8.5</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>4.2</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>
- 在源码根目录创建catalina-home,如图所示
注:将源码conf和webapps文件夹复制到catalina-home目录中
设置运行环境
-
设置启动参数
-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
参考配置如图:
注:可直接ctrl+shift+n搜索Bootstrap进行相关设置
-
注释TestCookieFilter相关测试方法(编译报错)
-
手动初始化JSP解析器
修改org.apache.catalina.startup.ContextConfig 方法 configureStart
context.addServletContainerInitializer(new JasperInitializer(), null);
注:此时已可直接运行Bootstrap进行访问(访问地址:http://localhost:8080),但会发现启动控制台打印日志有乱码的情况(ide默认设置UTF-8的原因,Tomcat默认编码为ISO-8859-1)
转换字符串编码
-
ctrl+shift+n搜索所有的StringManager(所有的均需要修改),添加相关代码
// 解决日志打印乱码问题,默认编码(ISO-8859-1)修改为UTF-8 try { value = new String(value.getBytes("ISO-8859-1"), "UTF-8"); }catch(Exception e){ e.printStackTrace(); }
-
修改org.apache.jasper.compiler.Localizer的getMessage(String errCode)方法
try { errMsg = new String(errMsg.getBytes("ISO-8859-1"), "UTF-8"); }catch(Exception e){ e.printStackTrace(); }
参考: