古道长亭

Contact me with ixiaoqiang0011@gmail.com


  • 首页

  • 归档

  • 分类

  • 关于

  • Book

  • 搜索

Tomcat 源码构建及核心流程剖析

时间: 2022-12-27   |   分类: Tomcat   | 字数: 648 字 | 阅读约: 2分钟 | 阅读次数:

Tomcat 源码构建及核心流程剖析

一、源码构建

仅做简单思路介绍,读源码的方式很多种…

  • 下载源码

    下载xxx-xxx-xxx-src的源码包

  • 解压后在目录下创建pox.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>
    
        <dependencies>
            <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>
    
        <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>11</source>
                        <target>11</target>
                    </configuration>
                </plugin>
            </plugins>
        </build>
    </project>
    
  • 在 apache-tomcat-8.5.50-src ⽬录中创建 source ⽂件夹

  • 将 conf、webapps ⽬录移动到刚刚创建的 source ⽂件夹中

  • 将源码⼯程导⼊到 IDEA 中

  • 给 tomcat 的源码程序启动类 Bootstrap 配置 VM 参数,因为 tomcat 源码运⾏也需要加载配置⽂件等。

    -Dcatalina.home=/Users/***/a-studing/source-code/apache-tomcat-8.5.50-src/source
    -Dcatalina.base=/Users/***/a-studing/source-code/apache-tomcat-8.5.50-src/source
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    # 此为conf 目录下logging.properties文件绝对路径
    -Djava.util.logging.configfile=/Users/***/a-studing/source-code/apache-tomcat-8.5.50-src/source/conf/logging.properties 
    
  • 运⾏ Bootstrap 类的 main 函数,此时就启动了tomcat,启动时候会去加载所配置的 conf ⽬录下的server.xml等配置⽂件,所以访问8080端⼝即可,但此时我们会遇到如下的⼀个错误

    原因是Jsp引擎Jasper没有被初始化,从⽽⽆法编译JSP,我们需要在tomcat的源码ContextConfig类中的configureStart⽅法中增加⼀⾏代码将 Jsp 引擎初始化

    如果出现以下错误:

    程序包 sun.rmi.registry 已在模块 java.rmi 中声明, 但该模块未将它导出到未命名模块

    按照idea的提示修复即可

  • 启动完成后,访问localhost:8080即可成功

二、核心流程剖析

Tomcat中的各容器组件都会涉及创建、销毁等,因此设计了⽣命周期接⼝Lifecycle进⾏统⼀规范,各容器组件实现该接⼝。

  • 启动流程

  • 请求处理流程

#Tomcat#
QQ扫一扫交流

标题:Tomcat 源码构建及核心流程剖析

作者:古道长亭

声明: 欢迎加群交流!

如有帮助,欢迎多多交流 ^_^

微信打赏

支付宝打赏

读写分离剖析
分库分表实战
  • 文章目录
  • 站点概览
古道长亭

古道长亭

Always remember that your present situation is not your final destination. The best is yet to come.

226 日志
57 分类
104 标签
GitHub Gitee
友情链接
  • 古道长亭的BOOK
  • JAVA学习
标签云
  • Mysql
  • 搜索引擎
  • Mybatis
  • 容器
  • 架构
  • 消息队列
  • Flink
  • Sharding sphere
  • 流处理
  • 缓存
  • 一、源码构建
  • 二、核心流程剖析
© 2019 - 2024 京ICP备19012088号-1
0%