<?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>Tomcat 8.5</name>
<version>8.5</version>
<build>
<finalName>Tomcat8.5</finalName>
<sourceDirectory>java</sourceDirectory>
<resources>
<resource>
<directory>java</directory>
</resource>
</resources>
<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>
在当前项目目录下创建home目录,并将webapps目录和conf目录拷贝到home目录下
指定org.apache.catalina.startup.Bootstrap
为启动类。配置启动参数,注意是在IDEA的VM OPTIONS中添加启动参数,不要选错。
-Dcatalina.home=E:/project/github/tomcat/home
-Dcatalina.base=E:/project/github/tomcat/home
-Djava.endorsed.dirs=E:/project/github/tomcat/home/endorsed
-Djava.io.tmpdir=E:/project/github/tomcat/home/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=E:/project/github/tomcat/home/conf/logging.properties
修改org.apache.catalina.startup.ContextConfig
类的configureStart()
方法,在该方法体中的webConfig();
代码下方位置处增加一行代码
context.addServletContainerInitializer(new JasperInitializer(), null);
。
(1)修改工程目录下所有的StringManager
类,修改其String getString(final String key, final Object... args)
方法,将tomcat默认的iso8859-1添加一层UTF-8的转码。
添加如下代码:
// 解决日志打印乱码问题,默认编码(ISO-8859-1)修改为UTF-8
try {
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
修改后的代码:
public String getString(final String key, final Object... args) {
String value = getString(key);
if (value == null) {
value = key;
}
// 解决日志打印乱码问题,默认编码(ISO-8859-1)修改为UTF-8
try {
value = new String(value.getBytes("ISO-8859-1"), "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
MessageFormat mf = new MessageFormat(value);
mf.setLocale(locale);
return mf.format(args, new StringBuffer(), null).toString();
}
(2)修改工程目录下org.apache.jasper.compiler.Localizer
的getMessage(String errCode)
方法
添加如下代码:
try {
errMsg = new String(errMsg.getBytes("ISO-8859-1"), "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
修改后的代码:
public static String getMessage(String errCode) {
String errMsg = errCode;
try {
if (bundle != null) {
errMsg = bundle.getString(errCode);
}
} catch (MissingResourceException e) {
}
try {
errMsg = new String(errMsg.getBytes("ISO-8859-1"), "UTF-8");
}catch(Exception e){
e.printStackTrace();
}
return errMsg;
}
此步骤完成以后,再次启动发现控制台已能正常打印日志。