首页 > 编程语言 >idea导入tomcat8源码搭建源码调试环境

idea导入tomcat8源码搭建源码调试环境

时间:2023-02-28 09:46:13浏览次数:60  
标签:CATALINA tomcat idea ant BASE 源码 apache tomcat8

从apache tomcat下载tomcat8源码

1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个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>Tomcat8.0</artifactId>    
    <name>Tomcat8.0</name>    
    <version>8.0</version>    
    
    <build>    
        <finalName>Tomcat8.0</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>2.0.2</version>    
    
                <configuration>    
                    <encoding>UTF-8</encoding>    
                    <source>1.8</source>    
                    <target>1.8</target>    
                </configuration>    
            </plugin>    
        </plugins>    
    </build>

    <dependencies>
      <dependency>
       <groupId>org.easymock</groupId>
       <artifactId>easymock</artifactId>
       <version>5.0.0</version>
       <scope>test</scope>
      </dependency>
    <dependency>
      <groupId>com.unboundid</groupId>
      <artifactId>unboundid-ldapsdk</artifactId>
      <version>6.0.4</version>
      <scope>test</scope>
    </dependency>
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.7.0</version>
        </dependency>
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant-apache-log4j</artifactId>
            <version>1.6.5</version>
        </dependency>
        <dependency>
            <groupId>ant</groupId>
            <artifactId>ant-commons-logging</artifactId>
            <version>1.6.5</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
        </dependency>
        <dependency>
            <groupId>javax.xml.rpc</groupId>
            <artifactId>javax.xml.rpc-api</artifactId>
            <version>1.1</version>
        </dependency>
        <dependency>
            <groupId>org.eclipse.jdt.core.compiler</groupId>
            <artifactId>ecj</artifactId>
            <version>4.6.1</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

2.使用idea导入tomcat源码 File->Project from Existing Sources -> Maven import
重新导入依赖后TestCookieFilter会报错,本地注释掉单元测试类即可。
3.编辑配置文件, Edit Configuration, 如下图。
设置catalina.home和tomcat启动类Bootstrap, jdk我选择的是1.8
QQ截图20230222103134.png
4.Maven Reload, 把依赖的包重新导入进来。
QQ截图20230222103526.png

添加JSP解析器代码:

1.Servlet.service() for servlet [jsp] in context with path [] threw exception [org.apache.jasper.JasperException: Unable to compile class for JSP] with root cause

解决方案:编辑 org.apache.catalina.startup.ContextConfig 文件的 configureStart() 方法,添加初始化 JSP 解析器的代码:

在ContextConfig类的configStart方法中加入以下代码

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

QQ截图20230221142355.png

我本地下载的tomcat8源码, 以上工作准备完后,直接编译,单元测试也没报错。运行起来,就可以看到猫咪了, 可以开心的看源码了。
QQ截图20230222110548.png
我本地的源码config/server.xml里配置的是8080端口, 这里就跑起来了。
QQ截图20230222110634.png

tomcat源码目录结构

QQ截图20230222104543.png

tomcat核心源码

QQ截图20230222110824.png

CATALINA_HOME和CATALINA_BASE

开始阅读tomcat源码之前,先浏览一遍tomcat官方写的介绍,里面内容很全,也是我们学习的第一手资料,这里涉及到两个变量CATALINA_HOME和CATALINA_BASE。

  • CATALINA_HOME:表示 Tomcat 安装的根目录,即D:\Gitee\tomcat8\apache-tomcat-8.5.85-src
  • CATALINA_BASE:表示特定 Tomcat 实例的运行时配置的根。如果你需要在一台机器上配置多个tomcat实例,则需要用到catalina_base变量

为什么使用CATALINA_BASE

默认情况下,CATALINA_HOME和CATALINA_BASE指向同一目录。当您需要在一台计算机上运行多个 Tomcat 实例时,手动设置CATALINA_BASE。这样做具有以下优点:

  • 更轻松地管理升级到较新版本的 Tomcat。由于具有单个CATALINA_HOME位置的所有实例共享一组文件和二进制文件,因此您可以轻松地将文件升级到较新版本,并将更改传播到使用同一CATALIA_HOME目录的所有 Tomcat 实例。
  • 避免重复相同的bin、lib文件夹的文件。
  • 共享某些设置的可能性,例如 shell 或 bat 脚本文件(取决于您的操作系统)。

参考资料

https://2i3i.com/tomcat-code-7.html

标签:CATALINA,tomcat,idea,ant,BASE,源码,apache,tomcat8
From: https://www.cnblogs.com/sword-successful/p/17162800.html

相关文章

  • tomcat源码分析(一)如何启动服务
    从startup.sh入手os400=falsecase"`uname`"inOS400*)os400=true;;esacPRG="$0"while[-h"$PRG"];dols=`ls-ld"$PRG"`link=`expr"$ls":'.*->\(......
  • 防错料使用二维码解决方案 生产过程物料防错管理 免费提供源码
    生产过程中,物料的防错管理是非常重要的一环。它能够有效地防止物料错用或混用,从而降低产品质量问题的发生率,减少生产成本和生产周期,提高生产效率和产品质量。以下是生产过......
  • IDEA插件Apifox,一键自动生成接口文档!
    有关Apifox软件之前写过一篇文章:接口测试神器Apifox,亲测好用!如何一键自动生成数据库文档之前也写过一篇文章:数据库界的Swagger:一键生成数据库文档!一、Apifox插件的优......
  • C#源码匹配常用正则表达式(摘录)
    C#源码匹配:CSharpStringRegex=newRegex(@""".*?""|'.+?'",RegexOptions.Compiled);CSharpCommentRegex1=newRegex(@"//.*$",RegexOptions.Multiline|RegexOptions......
  • idea 设置 堆栈大小后重启失败的问题
    现象:随着开发的项目越来越大,idea也会越来越卡,把idea的堆栈设置大后,重启idea,竟然idea重启不起来了。idea版本:  根本原因:idea设置的堆栈大小,启动的时候,超过了java......
  • Idea本地调试Flink踩坑
    1.背景    最近在整理以往写的项目,需要把所有做过的项目全部放到一个git地址上,整理过程中,准备再测试一下Flink程序,结果程序无法启动,就只有跟着报错一个一个的踩坑。2......
  • Spark DataSource 源码解析
    SparkSession.read()   创建DataFrameReader对象,进行数据读取任务。DataFrameReaderformatschemaoption   json、csv、text…通过format函数设置格......
  • idea开发使用外置tomcat配置
    1.添加依赖<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope></dependency>......
  • freeswitch对接移动IMS参数指定和源码修改
    freeswitch对接移动IMS参数指定和源码修改 因为移动的IMS对接都是注册的模式对接的,所以废话不多说,直接上gateway配置数据<include><gatewayname="8610xxxxxxx">/......
  • 【优分享】JMeter源码解析之结果收集器
    本文作者优测性能测试专家高源。简介:本文以最新的JMeter5.5版本源代码为例详细介绍了单机模式和分布式模式下结果收集器的工作原理。通篇干货,还不快来了解一下! 一、JMete......