官方地址
https://tomcat.apache.org/download-80.cgi
历史版本:
https://archive.apache.org/dist/tomcat/tomcat-8/
这里最新的是 8.5.55 ,我们就用这个吧
得到 apache-tomcat-8.5.55-src.zip
源码搭建分析
我们在使用tomcat时,俩目录 conf 和 webapps 是不是经常需要修改?
一个负责tomcat的配置文件信息,一个负责应用 。 很显然,我们使用源码构建tomcat环境的时候,也要告诉tomcat这两个目录的位置,以便加载配置文件和应用。
不管形式怎么变, 使用tomcat编译好的二进制还是源码部署编译,tomcat该加载的配置文件都是一样的。
因此 ,使用源码编译需要做出点改变, 比如下面搭建步骤中新建source文件夹目录,存放conf和webapps(实际上,这个目录名字爱叫啥,爱放哪 放哪, 我们只要通过VM options 告诉tomcat就好了,为了方便管理,所以在源码的一级目录下建个目录source)
源码搭建步骤 (Maven管理)
Step1. 新增maven管理文件 pom.xml
解压apache-tomcat-8.5.55-src.zip 后 ,比如我这里放到了D盘 , 在 D:\apache-tomcat-8.5.55-src 下 新建pom.xml
<?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.50-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> <plugins> <!--引入编译插件,指定编译级别和编码--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <encoding>UTF-8</encoding> <source>8</source> <target>8</target> </configuration> </plugin> </plugins> </build> <!--Tomcat是java开发的,封装了很多功能,它需要依赖一些基础的jar包--> <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> </dependencies> </project>
Step2. 处理conf 和 webapps
在 D:\apache-tomcat-8.5.55-src 下新建个source目录 ,原因如上分析
在apache-tomcat-8.5.55-src下创建source文件夹 ,将conf、webapps目录移动到 source文件夹中
这里多了其他的,是因为我刚才已经启动tomcat了…
Step3. 导入IEDA
3.1 配置Main Class
新增Application , 选择Main class , 配置VM 参数
3.2 配置VM 参数
VM参数 ,告诉tomcat 家目录一级 log日志文件目录。 【tomcat源码运行需要加载配置文件】
-Dcatalina.home=D:\apache-tomcat-8.5.55-src\source -Dcatalina.base=D:\apache-tomcat-8.5.55-src\source -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.util.logging.config.file=D:\apache-tomcat-8.5.55-src\source\conf\logging.properties
完整的信息如下:
Step4. 启动tomcat
原因: Jsp引擎Jasper没有被初始化,从而无法编译处理Jsp,Jsp是需要被转换成servlet进一步编译处理的,只需要在tomcat的源码ContextConfig类中的configureStart方法中增加一行代码将Jsp引擎初始化
// 初始化Jasper (JSP解析引擎) context.addServletContainerInitializer(new JasperInitializer(),null);
重启再次访问 http://locahost:8080/