1、下载源码

https://dlcdn.apache.org/tomcat/tomcat-9/v9.0.54/src/apache-tomcat-9.0.54-src.zip

2、解压

3、在解压后的根目录创建目录:catalina-home

4、复制目录到catalina-home中

5、在根目录中创建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>com.github.sources</groupId>
<artifactId>source-tomcat9</artifactId>
<version>9.0.37</version>
<name>source-tomcat-9.0.37</name>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.13</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.easymock</groupId>
<artifactId>easymock</artifactId>
<version>4.2</version>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.10.7</version>
</dependency>
<dependency>
<groupId>wsdl4j</groupId>
<artifactId>wsdl4j</artifactId>
<version>1.6.3</version>
</dependency>
<dependency>
<groupId>javax.xml</groupId>
<artifactId>jaxrpc</artifactId>
<version>1.1</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt</groupId>
<artifactId>org.eclipse.jdt.core</artifactId>
<version>3.13.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jdt.core.compiler</groupId>
<artifactId>ecj</artifactId>
<version>4.5.1</version>
</dependency>
<dependency>
<groupId>biz.aQute.bnd</groupId>
<artifactId>biz.aQute.bnd.ant</artifactId>
<version>5.2.0</version>
</dependency>
</dependencies>
<build>
<finalName>Tomcat9.0.37</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>3.6.1</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
</plugins>
</build>
</project>

注意,tomcat本身编译为二进制需要很多包,而我们源码调试不需要那么多的包,所以我们只将一些必要的拿出来了,这些在根目录中build.xml中可以看到,注意这个build.xml是ant编译使用的,我们使用maven,所以需要创建一个pom.xml文件。

6、用IDEA打开目录

打开后使其加载maven工程,如果未加载,那么则右击pom.xml然后选择add as mavem。

7、配置启动类

注意jdk版本为8。

注意还需要给启动类增加vm参数:

-Dcatalina.base=E:/MyeclispeWordsapce/apache-tomcat-9.0.54-src/catalina-home
-Dcatalina.home=E:/MyeclispeWordsapce/apache-tomcat-9.0.54-src/catalina-home
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
-Djava.util.logging.config.file=E:/MyeclispeWordsapce/apache-tomcat-9.0.54-src/catalina-home/conf/logging.properties
-Dfile.encoding=UTF-8
-Dsun.jnu.encoding=UTF-8

注意更换为你自己的路径。

8、运行

然后运行BootStrap启动。

中途如果报错xxx类找不到,或者不存在,直接打开坐标搜索框:

然后找到你需要的包,对应的添加进pom.xml就行。

注意任何报错不存在等都可以用这个解决,不用一直百度搜。

注意如果JDTComplier这个类报错的话,那么则需要修改代码

像这种CompilerOptions.VERSION_X这种就会报错不存在,那么你可以把多余的if删掉,强迫症也可以手动的给值,例如jdk1.9=1.9,jdk11=11这种。

9、运行后改错

注意运行成功后控制台是乱码,且访问8080会报错。

控制台的乱码先别慌,先看浏览器的报错,这个报错是因为tomcat启动时没有加载jsp初始化类JasperInitializer ,然后编译不了jsp,所以报错,解决方法是:

解决浏览器报错

1、定位到此方法:org.apache.catalina.startup.ContextConfig#configureStart

2、在此处加上监听器:

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

然后浏览器能正常访问:

解决而控制台乱码

1、定位位置:org.apache.tomcat.util.res.StringManager#getString(java.lang.String)

加入这些代码,把字符转个义。

/** 解决乱码 */
try {
str = new String(str.getBytes(StandardCharsets.ISO_8859_1),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

2、定位位置:org.apache.jasper.compiler.Localizer#getMessage(java.lang.String)

加入这些代码,把字符转个义

/** 解决乱码 */
try {
errMsg = new String(errMsg.getBytes(StandardCharsets.ISO_8859_1),"UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}

然后控制台就没有乱码了,总体来说就是哪里乱码了就去改哪里的编码,查找位置的话直接在控制台上去看具体的包和类。

然后就部署完成,没有其他问题,可以开始debug了。

Tomcat源码部署的更多相关文章

  1. 单点登录(五)-----遇到问题-----cas server 源码部署tomcat运行报错BeanCreationException:Error creating bean with name 's

    我们在上一篇文章已经解决了把下载好的cas server源码部署到tomcat缺少子项目编辑文件或者jar包导致找不到class报错的问题 单点登录(四)-----遇到问题-----cas serve ...

  2. 单点登录(四)-----遇到问题-----cas server 源码部署tomcat运行报错ClassNotFoundException: org.jasig.cas.CasEnvironmentCo

    情况 cas单点登录 cas server 源码部署tomcat运行报错 把cas server的代码下载下来后使用gradle插件或者maven插件以及转化成eclipse·后导入发现部署到tomc ...

  3. 75篇关于Tomcat源码和机制的文章

    75篇关于Tomcat源码和机制的文章 标签: tomcat源码机制 2016-12-30 16:00 10083人阅读 评论(1) 收藏 举报  分类: tomcat内核(82)  版权声明:本文为 ...

  4. java源码部署

    环境:nginx+tomcat部署方式:源码部署源码目录 /chroot2/test/schedule 目录下面就是所有源码了tomcat 位置: /usr/local/tomcat/apache-t ...

  5. mondrian 4.7 源码部署

    mondrian是一个开源的数据分析工程, 网上有关mondrian3.X的源码部署比较多, 有关4.X的部署较少. 目前官方推荐使用的时mondrian3.7的修订版, 可以再github上下载到最 ...

  6. Tomcat源码组织结构

    Tomcat 源码组织结构 目录结构 这里所介绍的目录结构,是使用CATALINA-BASE变量定义的路径,如果没有通过配置多个CATALINA-BASE目录来使用多实例,则CATALINA-BASE ...

  7. Tomcat源码学习

    Tomcat源码学习(一) 转自:http://carllgc.blog.ccidnet.com/blog-htm-do-showone-uid-4092-type-blog-itemid-26309 ...

  8. Tomcat源码分析——Session管理分析(上)

    前言 对于广大java开发者而已,对于J2EE规范中的Session应该并不陌生,我们可以使用Session管理用户的会话信息,最常见的就是拿Session用来存放用户登录.身份.权限及状态等信息.对 ...

  9. Tomcat源码分析——请求原理分析(下)

    前言 本文继续讲解TOMCAT的请求原理分析,建议朋友们阅读本文时首先阅读过<TOMCAT源码分析——请求原理分析(上)>和<TOMCAT源码分析——请求原理分析(中)>.在& ...

  10. Tomcat源码分析——请求原理分析(中)

    前言 在<TOMCAT源码分析——请求原理分析(上)>一文中已经介绍了关于Tomcat7.0处理请求前作的初始化和准备工作,请读者在阅读本文前确保掌握<TOMCAT源码分析——请求原 ...

随机推荐

  1. linux 安装 talib 的完美姿势!

    安装 TA-Lib $ wget http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz $ tar -zxvf ta-li ...

  2. 在Vue中实现app拍照-选取本地图库-图片上传成功后预览

    基于Vue和uni-app实现手机app的功能实现和打包.拍照功能和选取本地图片使用的是HTML5的API 实现. 我为测试这个功能使用node写了个本地服务器,对于手机调试,可以通过连接同一个无线网 ...

  3. 淘淘商城项目技术点-9:使用FTPClient及FtpUtil工具类将图片上传至ngnix图片服务器

    package com.taotao.controller; import com.taotao.common.utils.FtpUtil; import org.apache.commons.net ...

  4. css布局、动画要点

    background属性 属性解释background属性是css中应用比较多,且比较重要的一个属性,它是负责给盒子设置背景图片和背景颜色的,background是一个复合属性,它可以分解成如下几个设 ...

  5. sqlserver存储过程学习

    存储过程学习  一.定义变量 --简单赋值  declare @a int set @a=5  print @a     --使用select语句赋值  declare @user1 nvarchar ...

  6. Path类,文件操作的路径用法

    using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Tex ...

  7. java乱码处理

    package com.zhouhe.util; import java.io.UnsupportedEncodingException; /** * 自定义工具类 * @Author zhouhe ...

  8. Safari浏览器如何收藏网页?

    Safari浏览器是MacOS所自带的一款功能强劲的浏览器,许多MacOS的用户在使用过Safari浏览器后就不会去下载其他浏览器了.对于很多Mac新手用户来说,如何使用Safari浏览器来收藏喜欢的 ...

  9. iOS开发之时间格式化

    //返回当前时间,以GMT为准 NSDate * date = [NSDate date]; NSLog(@"%@", date); //显示当前时间距离1970-01-01 00 ...

  10. bigdecimal 比较大小、bigdecimal 数学运算、bigdecimal 精度

    创建 BigDecimal 建议使用 public BigDecimal(String val),使用 number 参数可能会有精度问题 设置精度 setScale(3, BigDecimal.RO ...