Tomcat - 源码构建Tomcat 8.5.55 启动

文章目录

Tomcat - 源码构建Tomcat 8.5.55 启动


官方地址

https://tomcat.apache.org/download-80.cgi

Tomcat - 源码构建Tomcat 8.5.55 启动
历史版本:

https://archive.apache.org/dist/tomcat/tomcat-8/

这里最新的是 8.5.55 ,我们就用这个吧

Tomcat - 源码构建Tomcat 8.5.55 启动

得到 apache-tomcat-8.5.55-src.zip


源码搭建分析

我们在使用tomcat时,俩目录 conf 和 webapps 是不是经常需要修改?

Tomcat - 源码构建Tomcat 8.5.55 启动

一个负责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 - 源码构建Tomcat 8.5.55 启动

这里多了其他的,是因为我刚才已经启动tomcat了…


Step3. 导入IEDA

3.1 配置Main Class

新增Application , 选择Main class , 配置VM 参数
Tomcat - 源码构建Tomcat 8.5.55 启动

Tomcat - 源码构建Tomcat 8.5.55 启动

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

完整的信息如下:

Tomcat - 源码构建Tomcat 8.5.55 启动


Step4. 启动tomcat

Tomcat - 源码构建Tomcat 8.5.55 启动

访问 http://locahost:8080/

Tomcat - 源码构建Tomcat 8.5.55 启动

原因: Jsp引擎Jasper没有被初始化,从而无法编译处理Jsp,Jsp是需要被转换成servlet进一步编译处理的,只需要在tomcat的源码ContextConfig类中的configureStart方法中增加一行代码将Jsp引擎初始化

  // 初始化Jasper  (JSP解析引擎)
  context.addServletContainerInitializer(new JasperInitializer(),null);

Tomcat - 源码构建Tomcat 8.5.55 启动

重启再次访问 http://locahost:8080/

Tomcat - 源码构建Tomcat 8.5.55 启动

上一篇:粘包问题处理


下一篇:AI:2020年6月23日北京智源大会演讲分享之智能信息检索与挖掘专题论坛——09:55-10:40刘欢教授《Challenges in Combating Disinformation》