前言
Tomcat 是我们每个 Java 工作者都会接触的,我们天天接触它,使用它,但是很多人就仅仅只知道如何使用它,它的工作原理是如何的?启动过程是如何的?很少有人去了解、分析它,已经要对Tomcat进行配置优化,所以了解他的工作原理还是很有必要的。
准备工作
- tomcat版本 8.5.35
- 下载地址 https://tomcat.apache.org/download-80.cgi
- JDK 1.8
项目结构
将下载下来的源码压缩包解压,然后在解压后的目录中新建catalina-home目录和pom.xml文件,将跟目录中的conf和webapps文件夹复制到catalina-home目录中,如下
pom文件内容如下
<?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> <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> <dependency> <groupId>javax.xml.soap</groupId> <artifactId>javax.xml.soap-api</artifactId> <version>1.4.0</version> </dependency> </dependencies> </project>
catalina-home目录结构如下,没有的目录结构新建空文件夹
构建项目
1.使用IDEA 以maven的项目导入
2.构建好项目后配置启动参数
Main class设置为org.apache.catalina.startup.Bootstrap
-Dcatalina.home=C:/develop/code/apache-tomcat-8.5.35-src/catalina-home
-Dcatalina.base=C:/develop/code/apache-tomcat-8.5.35-src/catalina-home
-Djava.endorsed.dirs=C:/develop/code/apache-tomcat-8.5.35-src/catalina-home/endorsed
-Djava.io.tmpdir=C:/develop/code/apache-tomcat-8.5.35-src/catalina-home/temp
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=C:/develop/code/apache-tomcat-8.5.35-src/catalina-home/conf/logging.properties
说明:如果编译build的时候出现Test测试代码报错,注释该代码即可。本文中的Tomcat源码util.TestCookieFilter类会报错,将其注释即可,catalina-home目录用全路径
启动项目
1.在org.apache.catalina.startup.ContextConfig类中手动将JSP解析器初始化
context.addServletContainerInitializer(new JasperInitializer(), null);
2.修改完后,点击运行或者调试按钮后,正常运行。
访问浏览器 http://localhost:8080/