zoukankan      html  css  js  c++  java
  • 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"/>
    

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

  • 相关阅读:
    QOMO Linux 4.0 正式版发布
    LinkChecker 8.1 发布,网页链接检查
    pgBadger 2.1 发布,PG 日志分析
    Aletheia 0.1.1 发布,HTTP 调试工具
    Teiid 8.2 Beta1 发布,数据虚拟化系统
    zLogFabric 2.2 发布,集中式日志存储系统
    开源电子工作套件 Arduino Start Kit 登场
    Piwik 1.9 发布,网站访问统计系统
    Ruby 1.9.3p286 发布,安全修复版本
    toBraille 1.1.2 发布,Java 盲文库
  • 原文地址:https://www.cnblogs.com/babycomeon/p/13671188.html
Copyright © 2011-2022 走看看