Erlo

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

2023-02-28 10:00:23 发布   114 浏览  
页面报错/反馈
收藏 点赞

从apache tomcat下载tomcat8源码

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

    
    
    
    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:Giteetomcat8apache-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

博客地址:http://www.cnblogs.com/sword-successful/
博客版权:本文以学习、研究和分享为主,欢迎转载,但必须在文章页面明显位置给出原文连接。
如果文中有不妥或者错误的地方还望高手的你指出,以免误人子弟。如果觉得本文对你有所帮助不如【推荐】一下!如果你有更好的建议,不如留言一起讨论,共同进步!
再次感谢您耐心的读完本篇文章。

登录查看全部

参与评论

评论留言

还没有评论留言,赶紧来抢楼吧~~

手机查看

返回顶部

给这篇文章打个标签吧~

棒极了 糟糕透顶 好文章 PHP JAVA JS 小程序 Python SEO MySql 确认