栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

手把手教把Tomcat源码跑起来,步骤详细,及启动后运行自己的Web项目,学不会你打我

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

手把手教把Tomcat源码跑起来,步骤详细,及启动后运行自己的Web项目,学不会你打我

文章目录

前言参考文章步骤

1.下载tomcat源码2.解压并配置maven3.用idea打开4.配置tomcat工作目录5.配置启动类及相关参数

5.1 随便填个名字5.2 配置启动类,填下面内容5.3 配置虚拟机选项,填下面内容5.4 在选项中选择子模块那个 6.取消test文件夹标记7.尝试启动

7.1 然后他会提示找不到,这些找不到的都是因为环境变量引用的,直接把报红的注释掉就好 8.再次启动9.拷贝完成后再次启动10.解决乱码问题

方式一:把文件转码转为`iso8859-1`在给tomcat读取(可用JDK下的工具native2ascii.exe将properties文件转为Unicode编码)方式二:找到读取位置的代码,把读取后的字符单独转码

10.110.210.310.410.510.6 类似的还有一处需要转码的位置在 11.再次启动12.部署项目


前言

一直对Tomcat的源码挺感兴趣,里面挺多过程的实现都想瞅一瞅,所以把tomcat源码下载下来跑一下

下文详细介绍用maven方式Tomcat源码跑起来,并运行自己的Web项目

本文地址:https://blog.csdn.net/weixin_54430656/article/details/122440049


参考文章

如何断点调试Tomcat源码


步骤 1.下载tomcat源码

Tomcat官网

https://tomcat.apache.org/

Tomcat 10下载页链接

https://tomcat.apache.org/download-10.cgi

下载地址,这里下载的是Tomcat 10.0.14

https://dlcdn.apache.org/tomcat/tomcat-10/v10.0.14/src/apache-tomcat-10.0.14-src.zip
2.解压并配置maven

2.1 找个空目录解压,并在同层目录下新建pom.xml文件

pom.xml内容如下:

    
    
    
    4.0.0    
    gxf    
    apache-tomcat-10
    apache-tomcat-10-source
    1.0    
    pom    
    
        
        apache-tomcat-10.0.14-src
        

2.2 在解压出来的文件夹下再新建一个pom.xml文件,内容如下:





    4.0.0
    org.apache.tomcat
    Tomcat10.0
    Tomcat10.0
    10.0

    
        Tomcat10.0
        java
        test
        
            
                java
            
        
        
            
                test
            
        
        
            
                org.apache.maven.plugins
                maven-compiler-plugin
                2.0.2

                
                    UTF-8
                    1.8
                    1.8
                
            
        
    

    
        
            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
        
        
            org.apache.tomcat
            jakartaee-migration
            1.0.0
        
      
        biz.aQute.bnd
        biz.aQute.bndlib
        5.2.0
      
    

2.3 目录结构层次如下

-- tomcat
    -- apache-tomcat-10.0.14-src
        -- pom.xml
    -- pom.xml
3.用idea打开

用idea打开最外层的tomcat目录

4.配置tomcat工作目录

可以在原先的解压目录apache-tomcat-10.0.14-src新建一个home目录,这个目录是tomcat的工作目录,到时候其下会放置有work、webapps、logs、lib、conf等文件夹,然后复制这个目录,例如xxxTomcatapache-tomcat-10.0.14-srchome,后面需要用到这个目录

5.配置启动类及相关参数


5.1 随便填个名字 5.2 配置启动类,填下面内容
org.apache.catalina.startup.Bootstrap
5.3 配置虚拟机选项,填下面内容
-Dfile.encoding=UTF-8
-Dcatalina.home="这里添刚刚复制的目录"
5.4 在选项中选择子模块那个 6.取消test文件夹标记

这个文件夹下主要为tomcat的测试目录,里面有许多我们用不到的,许多依赖也是我们不需要的,不把他取消标记的话,等一下会报一堆依赖缺失

7.尝试启动

7.1 然后他会提示找不到,这些找不到的都是因为环境变量引用的,直接把报红的注释掉就好

8.再次启动

再次启动后会提示缺少配置文件,并且有乱码问题

8.1 找到我们原先电脑上安装过的tomcat,然后把那里的配置文件拷贝一份过去,考到将conf文件夹拷到刚刚新建的home目录下

9.拷贝完成后再次启动

这个时候成功启动起来了,但是有乱码问题

10.解决乱码问题

这里的乱码不是因为JVM的问题,而是那些目录下那些.properties文件是以UTF-8形式保存的,而java读取的时候默认却以iso8859-1的形式读取,才导致的中文乱码

有两种解决的思路

方式一:把文件转码转为iso8859-1在给tomcat读取(可用JDK下的工具native2ascii.exe将properties文件转为Unicode编码)



方式二:找到读取位置的代码,把读取后的字符单独转码

下面我用的是方式二

10.1

尝试DeBug找到位置
调试思路就是入口类org.apache.catalina.startup.Bootstrap的入口函数直接打断点,如何逐步单行过语句。
如果过掉的当前这一行没有打印出乱码,就说明和这行没关系;如果打印出了乱码,那就进入这一行,细看,这样就逐步找到了出乱码的准确位置

10.2

后面追到org.apache.tomcat.util.res.StringManager这个StringManager类的时候,可以看到正常的一个key,在ResourceBundle中获取之后就变成乱码了

10.3

所以问题就出在这个ResourceBundle(ResourceBundle是资源包,从硬盘文件加载而来),然后我们把断点直接打在ResourceBundle的初始化的位置

10.4

然后可以看到,ResourceBundle在加载出来的时候就已经乱码了

10.5

然后找到他加载时的输入流,根据输入流找到所加载的那个文件的位置,然后打开中文版发现文件没乱码,但是加载之后乱码了——加载方式不对,编码不对应,文件是UTF-8的,而java加载文件默认使用iso8859-1

下面是位置

orgapachecatalinastartupLocalStrings.properties

打开源文件可以看到是显示正常的,所以我们可以回到刚刚那个StringManager类里面读取bundle的那个位置(步骤10.1),把读取到的字符转码,转位UTF-8

转码过程如下

str= new String(str.getBytes(StandardCharsets.ISO_8859_1), StandardCharsets.UTF_8);

10.6 类似的还有一处需要转码的位置在

org.apache.jasper.compiler.Localizer类的getMessage(String errCode)方法

11.再次启动

一切正常

12.部署项目

将打包好的war包放到刚刚新建的home目录下的webapps下,然后重启tomcat就行了,最后项目成功跑起来并可以访问


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/703836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号