• Tomcat 第一篇:源码导入 IDEA 编辑器


    1 引言

    做 Java 的同学应该都见过上面这只名字叫 Tomcat 的猫,毕竟这只猫在过去和现在都是全球最流行的 Web 容器之一。

    很有意思的一件事儿是从我接触这只猫开始,从来不知道它的中文名字是啥,好像没有在任何地方看到过。

    然后某人第一次见跟我说这是汤姆猫么???

    我就没想通,这俩玩意长这么大差距是如何能被认成是同一只猫的。

    不过话说回来,这东西我也接触了有很多年了,从来都只是拿来用,忽然有想法深入了解下 Tomcat 的运行机制了。

    那么最好的方式就是看源码,如果说看源码不知道从哪看齐,还可以看官方的指引文档。

    2 下载源码

    Tomcat 的源码下载要比上周下载那个 OpenJDK 的源码好下载多了,官网直接给出了打好的源码包,同时在 GitHub 上也能找到对应的仓库。

    这里我选择的是当前最新的 8.5.x 的版本。

    官网下载地址:https://tomcat.apache.org/download-80.cgi

    GitHub 地址:https://github.com/apache/tomcat

    如果从 GitHub 下载还可以使用命令:

    git clone git@github.com:apache/tomcat.git
    

    源码下载完成后直接解压,接下来我们把这个项目导入我们的编辑工具 IDEA 中。

    3 导入 IDEA

    我在网上看了下,大致有两种方案导入。

    由于本身 Tomcat 项目是使用 Ant 作为包管理工具的,而 Ant 我没有接触过,也不大熟悉,这个方案我直接放弃掉了。

    接下来还有一个方案是使用 Maven 的方式进行导入,这个我熟悉,天天用。

    因为是 Maven 工程,那么一定需要一个 pom.xml 文件,首先在项目的根目录下创建这个文件,并且 copy 以下内容:

    <?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</groupId>
        <artifactId>tomcat</artifactId>
        <name>apache-tomcat-8.5.57</name>
        <version>8.5.57</version>
    
        <build>
            <finalName>Tomcat-8.5.57</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>3.5.1</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>
                <scope>test</scope>
            </dependency>
    
            <dependency>
                <groupId>org.apache.ant</groupId>
                <artifactId>ant</artifactId>
                <version>1.10.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.6.1</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/org.glassfish/javax.xml.rpc -->
            <dependency>
                <groupId>org.glassfish</groupId>
                <artifactId>javax.xml.rpc</artifactId>
                <version>3.0.1-b03</version>
            </dependency>
    
        </dependencies>
    </project>
    

    然后在 IDEA 中点击 File -> New -> Project from Existing Sources... 选择我们刚才解压后的文件夹。

    选择 Maven 项目,点击 Finish 直接完成。

    4 启动 Tomcat

    接下来的事儿就好办多了,首先选择当前的 jdk 版本,我这里使用的是 OracleJDK 1.8.0_221 ,最好是使用 1.8 的版本,因为我尝试过最新的 OpenJDK14 直接通不过编译(说好的向下兼容呢)。

    Tomcat 的启动类是 org.apache.catalina.startup.Bootstrap ,直接运行这个类里面的 main 方法就可以启动了。

    当然,如果就这么单纯的运行这个类还是会启动报错的,还需要下面几步操作。

    1. 首先需要删除一个测试类 test/util/TestCookieFilter.java

    2. 然后还需要配置启动参数:

    -Dcatalina.home=D:/Development/Projects/Tomcat-Learning/apache-tomcat-8.5.57-src
    -Dcatalina.baseD:/Development/Projects/Tomcat-Learning/apache-tomcat-8.5.57-src
    -Djava.endorsed.dirs=D:/Development/Projects/Tomcat-Learning/apache-tomcat-8.5.57-src/endorsed
    -Djava.io.tmpdir=D:/Development/Projects/Tomcat-Learning/apache-tomcat-8.5.57-src/temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:/Development/Projects/Tomcat-Learning/apache-tomcat-8.5.57-src/conf/logging.properties
    -Duser.language=en
    -Duser.region=US
    

    最后这两个参数是指定了语言环境,如果不配置的话在控制台的日志打印会直接乱码,虽然不影响使用,但是影响到我们观察日志了,最好还是做一下配置。

    1. 添加 jsp 初始化程序

    org.apache.catalina.startup.ContextConfig.java 中添加下面这句话:

    context.addServletContainerInitializer(new JasperInitializer(), null);
    

    如果不添加的话,启动是能正常启动,但是 Tomcat 的欢迎页就看不到了,会直接报 jsp 解析器空指针:

    org.apache.jasper.JasperException: java.lang.NullPointerException
    

    到这里,已经可以运行上面的 org.apache.catalina.startup.Bootstrap 里面的 main 进行启动了,启动完成后在浏览器上输入 http://localhost:8080/ 就可以看到那个经典的 Tomcat 的欢迎页了:

    1. 部署程序

    如果想在这个 Tomcat 中部署程序的话,需要把程序放在 D:DevelopmentProjectsTomcat-Learningapache-tomcat-8.5.57-srcwebappsROOT ,这个是我自己本地的路径,你们的路径自己做拼接。

    然后再在 D:DevelopmentProjectsTomcat-Learningapache-tomcat-8.5.57-srcconf 这个路径中的 server.xml 配置工程,就和在 Tomcat 中配置 server.xml 是一模一样的,比如:

    在 Host 中增加节点

    <Context docBase="D:DevelopmentProjectsTomcat-Learningapache-tomcat-8.5.57-srcwebappsROOT" path="/mytomcat" reloadable="true"/>
    

    哎,我又是开了新系列的头,希望最近能有时间把这个系列写完吧。

  • 相关阅读:
    python数据分析——numpy数组学习(2)
    python数据分析——numpy数组学习(2)
    python数据分析——numpy数组学习
    python数据分析——numpy数组及其运算
    python基础学习——列表与列表表达式
    python基础学习——列表与列表表达式
    各国国土面积、军队数量、GDP总计数据分析
    爬取起点月票榜
    《战争艺术概论》词云
    影评网站-团队博客目录
  • 原文地址:https://www.cnblogs.com/babycomeon/p/13671188.html
Copyright © 2020-2023  润新知