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


    从apache tomcat下载tomcat8源码

    1.下载到源码后,tomcat默认使用ant作为包管理工具,本地调试时创建pom.xml, 手动创建一个pom.xml放入源码根目录

    "1.0" encoding="UTF-8"?>    
    "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">    
        
        4.0.0    
        org.apache.tomcat    
        Tomcat8.0    
        Tomcat8.0    
        8.0    
        
            
            Tomcat8.0    
            java    
            test    
                
                    
                    java    
                    
                
                
                    
                    test    
                    
                
                
                    
                    org.apache.maven.plugins    
                    maven-compiler-plugin    
                    2.0.2    
        
                        
                        UTF-8    
                        1.8    
                        1.8    
                        
                    
                
        
    
        
          
           org.easymock
           easymock
           5.0.0
           test
          
        
          com.unboundid
          unboundid-ldapsdk
          6.0.4
          test
        
            
                ant
                ant
                1.7.0
            
            
                ant
                ant-apache-log4j
                1.6.5
            
            
                ant
                ant-commons-logging
                1.6.5
            
            
                wsdl4j
                wsdl4j
                1.6.2
            
            
                javax.xml.rpc
                javax.xml.rpc-api
                1.1
            
            
                org.eclipse.jdt.core.compiler
                ecj
                4.6.1
            
            
                junit
                junit
                4.12
                test
            
        
    
    
    

    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

  • 相关阅读:
    LeetCode每日一题(898. Bitwise ORs of Subarrays)
    知识储备--基础算法篇-矩阵
    Ray Tracing Gems II
    还不会正则表达式? 放心 我会出手(万字教学)
    【Rust 日报】2022-06-19 Rust 1.63 新特性令人期待
    Nginx安装及配置负载均衡
    就业的二三事
    实名报名超5000人!RTE2022即将开幕,声网发布RTE行业首本专业书《实时万象》
    java之冒泡排序和选择排序和直接插入排序原理
    webpack:详解cache模块常用配置
  • 原文地址:https://www.cnblogs.com/sword-successful/p/17162800.html