当前位置: 首页 > news >正文

【Tomcat】IDEA编译Tomcat源码-手把手教程

一、环境准备

Tomcat不同版本之间有一定的兼容性问题~

如下图所示:

官网地址:https://tomcat.apache.org/whichversion.html

下载tomcat9官网上面的源码:

这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。

使用的版本是Tomcat9.0.55JDK8。

另外插一句,虽然官网上面讲两者是可以兼容的,但是我在做自己的项目的时候,就因为使用了Tomcat9一直报“资源不可用”之类的错误,后面换成了Tomcat8.0就可以了......

看了网络上面也有很多小伙伴表示遇到过同样的问题!也是将Tomcat版本降到8或者是将JDK升到11就可以了。

不过上述内容与本章内容是不冲突的,大家可以使用下文给出的本人的Tomcat源码仓库地址自行下载!

二、Tomcat源码下载

Gitee地址:

TomcatSource: 基于Tomcat9.0.55的源码,我们可以在IDEA上面编译调试。 (gitee.com)

三、部署&&编译

1.修改项目结构

将下载下来的源码压缩包解压,然后在解压后的目录中新建pom.xml文件, pom文件内容如下:

<?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"><groupId>com.tuling</groupId><artifactId>mvc</artifactId><version>1.0-SNAPSHOT</version><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><configuration><source>8</source><target>8</target></configuration></plugin></plugins></build><modelVersion>4.0.0</modelVersion><packaging>war</packaging><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.11</version><scope>test</scope></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.3.13</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet</groupId><artifactId>jstl</artifactId><version>1.2</version></dependency><dependency><groupId>commons-fileupload</groupId><artifactId>commons-fileupload</artifactId><version>1.3.3</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.1.9.RELEASE</version></dependency></dependencies>
</project>

2.构建项目

使用IDEA 选中pom.xml,以maven的项目导入

构建好项目后配置启动参数

添加Main class

org.apache.catalina.startup.Bootstrap

添加VM options

注意:要根据自己的实际情况修改!

-Dcatalina.home=D:/JavaSource/Tomcat/apache-tomcat-9.0.55-src 
-Dcatalina.base=D:/JavaSource/Tomcat/apache-tomcat-9.0.55-src 
-Djava.endorsed.dirs=D:/JavaSource/Tomcat/apache-tomcat-9.0.55-src/endorsed 
-Djava.io.tmpdir=D:/JavaSource/Tomcat/apache-tomcat-9.0.55-src/temp 
-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager 
-Djava.util.logging.config.file=D:/JavaSource/Tomcat/apache-tomcat-9.0.55-src/conf/logging.properties 
-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=8025 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 
-Duser.language=en -Duser.region=US

JDTCompiler关于版本报错部分注释掉

修改源码ContextConfig类,将JSP解析器初始化

3.启动运行

访问浏览器:http://localhost:8080/

相关文章:

【Tomcat】IDEA编译Tomcat源码-手把手教程

一、环境准备Tomcat不同版本之间有一定的兼容性问题~如下图所示&#xff1a;官网地址&#xff1a;https://tomcat.apache.org/whichversion.html下载tomcat9官网上面的源码&#xff1a;这一篇文章主要是带着大家在自己的IDEA跑起来一个Tomcat。使用的版本是Tomcat9.0.55 和 JDK…...

如何弄小程序?公司企业可以这样做小程序

公司企业现在对于小程序的需求已经是刚需了&#xff0c;即使已经有官网的情况下&#xff0c;也会考虑再弄一个小程序来做小程序官网。那么公司企业如何弄小程序呢&#xff1f;下面跟大家说说方法。 流程一、找小程序服务商 由于一些公司企业并不像现在的互联网公司企业那样有…...

【Git】IDEA集合Git和码云

目录 7、IDEA集合Git 7.1 配置Git忽略文件-IDEA特定文件 7.2 定位 Git 程序 7.3 初始化本地库 7.4 添加到暂存区 7.5 提交到本地库 7.6 切换版本 7.7 创建分支 7.8 切换分支 7.9 合并分支 7.10 解决冲突 8、 Idea集成码云 8.1 IDEA 安装码云插件 8.2 分析工程到码…...

[USACO03FALL / HAOI2006] 受欢迎的牛 G(C++,强连通分量)

题目背景 本题测试数据已修复。 题目描述 每头奶牛都梦想成为牛棚里的明星。被所有奶牛喜欢的奶牛就是一头明星奶牛。所有奶牛都是自恋狂&#xff0c;每头奶牛总是喜欢自己的。奶牛之间的“喜欢”是可以传递的——如果 AAA 喜欢 BBB&#xff0c;BBB 喜欢 CCC&#xff0c;那么…...

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法

Vue 动态路由接口数据结构化为符合VueRouter的声明结构及菜单导航结构、动态路由懒加载方法 实现目标 项目打包代码实现按需分割路由懒加载按需打包&#xff0c;排除引入子组件的冗余打包&#xff08;仅处理打包冗余现象&#xff0c;不影响生产部署&#xff09;解决路由懒加载…...

Python----------字符串

1.转义字符 注&#xff1a;转义字符放在你所想效果字符前 2.原始字符串 print(r"D:\three\two\one\now") ->D:\three\two\one\now注&#xff1a; 在使用原始字符串时&#xff0c;转义字符不再有效&#xff0c;只能当作原始的字符&#xff0c;每个字符都没有特殊…...

日志收集笔记(架构设计、Log4j2项目初始化、Lombok)

1 架构设计 ELK 技术栈架构设计图&#xff1a; 从左往右看&#xff0c; Beats&#xff1a;主要是使用 Filebeat&#xff0c;用于收集日志&#xff0c;将收集后的日志数据发送给 Kafka&#xff0c;充当 Kafka 的生产者Kafka&#xff1a;高性能消息队列&#xff0c;主要起缓冲…...

一文教你玩转 Apache Doris 分区分桶新功能|新版本揭秘

数据分片&#xff08;Sharding&#xff09;是分布式数据库分而治之 (Divide And Conquer) 这一设计思想的体现。过去的单机数据库在大数据量下往往面临存储和 IO 的限制&#xff0c;而分布式数据库则通过数据划分的规则&#xff0c;将数据打散分布至不同的机器或节点上&#xf…...

数据挖掘,计算机网络、操作系统刷题笔记54

数据挖掘&#xff0c;计算机网络、操作系统刷题笔记54 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0c;可能很多算法学生都得去找开发&#xff0c;测开 测开的话&#xff0c;你就得学数据库&#xff0c;sql&#xff0c;orac…...

将数组中的每个元素四舍五入到指定的精度numpy.rint()

【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【Python-数据分析】 将数组中的每个元素 四舍五入到指定的精度 numpy.rint() 选择题 请问np.rint(a)的输出结果是? import numpy as np anp.array([-1.72,-1.3,0.37,2.4]) print("【显示】a&#xff1a;\n…...

Web安全之服务器端请求伪造(SSRF)类漏洞详解及预防

如何理解服务器端请求伪造&#xff08;SSRF&#xff09;类漏洞当服务器向用户提交的未被严格校验的URL发起请求的时候&#xff0c;就有可能会发生服务器端请求伪造&#xff08;SSRF&#xff0c;即Server-Side Request Forgery&#xff09;攻击。SSRF是由攻击者构造恶意请求URL&…...

LeetCode:239. 滑动窗口最大值

239. 滑动窗口最大值 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例 1&#xff1a; 输入&#xff1a;nums [1,3,-…...

JS 函数参数(动态参数、剩余参数)

需求&#xff1a;求和函数 传入不同实参 求和出来1.动态参数 arguments 只存在于函数内function getSum() {//arguments 获取传递的所有参数 是一个伪数组let num 0for(let i0;i<arguments.length;i){num arguments[i]}return num}//调用console.log(getSum(1,2,3))consol…...

365天深度学习训练营-第J3周:DenseNet算法实战与解析

目录 一、前言 二、论文解读 1、DenseNet的优势 2、设计理念 3、网络结构 4、与其他算法进行对比 三、代码复现 1、使用Pytorch实现DenseNet 2、使用Tensorflow实现DenseNet网络 四、分析总结 一、前言 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习…...

Parisland NFT 作品集

该作品集用来自 Parisland 体验&#xff0c;共包含 11 个 NFT 资产&#xff0c;把你的土地装扮成一个眼花缭乱的热带天堂吧&#xff01; 登上芭黎丝的爱情船和戴上豪华的螺旋爱情戒指&#xff0c;成为她在数位世界举办的真人秀的一部分吧&#xff01;该系列还包含两个传奇级别的…...

uniapp: 基础开发官网文档

1、uniapp官网文档&#xff1a;https://uniapp.dcloud.net.cn/component/2、uView跨端UI组件库&#xff1a;http://v1.uviewui.com/components/intro.html3、lunch-request&#xff08;类似axios的请求库&#xff09;&#xff1a;https://www.quanzhan.co/luch-request/handboo…...

mybatis中配置连接池的原理介绍分析

1.连接池&#xff1a;我们在实际开发中都会使用连接池。因为它可以减少我们获取连接所消耗的时间。2、mybatis中的连接池mybatis连接池提供了3种方式的配置&#xff1a;配置的位置&#xff1a;主配置文件SqlMapConfig.xml中的dataSource标签&#xff0c;type属性就是表示采用何…...

二叉树——路径总和

路径总和 链接 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶子节点…...

WebDAV之π-Disk派盘+文件管理器

文件管理器 支持WebDAV方式连接π-Disk派盘。 推荐一款iOS上的免费文件管理器新秀。 文件管理器这是一款功能强大的文件管理工具,支持zip,rar,7z等压缩包的解压和压缩,支持小说,漫画,视频下载及播,极大提升日常办公,娱乐,文件管理的工作效率,使得文档的归档和管理随心…...

form表单单输入框回车提交事件处理

问题 form表单中如果只有一个输入框&#xff0c;在输入时按Enter回车键会出发默认事件自动提交表单&#xff0c;该交互是同步发生的&#xff0c;会导致页面刷新。 解决思路 有三种解决思路&#xff1a; 1. 增加input输入框的数量 如果form表单中不止一个input输入框&#…...

Singularity镜像构建终极教程:从Docker到SIF的完整转换

Singularity镜像构建终极教程&#xff1a;从Docker到SIF的完整转换 【免费下载链接】singularity Singularity has been renamed to Apptainer as part of us moving the project to the Linux Foundation. This repo has been persisted as a snapshot right before the chang…...

SVN快速入门指南:从零到团队协作(极简版)

1. SVN是什么&#xff1f;为什么团队开发离不开它 第一次接触SVN是在2013年参与一个跨部门协作项目时。当时团队里有5个开发人员&#xff0c;每个人负责不同的模块&#xff0c;但最终需要整合成一个完整系统。项目经理要求我们使用SVN进行代码管理&#xff0c;那是我第一次体会…...

2025年大模型技术演进深度解析:从DeepSeek到Omni全景回顾

1.大三下保研成功&#xff0c;当时就pytorch熟练&#xff0c;玩过一些小模型&#xff0c;大模型调api都不会。海面了好几家公司&#xff0c;靠以前的课题项目和pku一个研究院切合&#xff0c;拿了大模型算法实习生offer&#xff0c;实际上以rag清洗数据为主&#xff0c;在这边学…...

【STM32内核解码】从Cortex-M0到M7:性能阶梯与实战选型指南

1. 认识ARM Cortex-M家族&#xff1a;从M0到M7的进化之路 第一次接触STM32选型时&#xff0c;我被型号列表里密密麻麻的字母数字组合搞得头晕眼花。直到一位前辈告诉我&#xff1a;"看懂内核型号&#xff0c;就掌握了选型的金钥匙。"这句话让我恍然大悟——原来STM32…...

云边协同 智启未来 | 阿里云 × ZStack 云边一体解决方案正式落地

随着数字化转型的不断深入&#xff0c;企业对于云计算的需求已从"集中上云"逐步演进为"云边协同"。在智慧城市、工业互联网、智慧交通、能源电力等行业场景中&#xff0c;数据的实时处理、低延迟响应以及本地化合规需求日益迫切。单一的中心化云架构已难以…...

3秒完整保存:颠覆传统的Full Page Screen Capture网页截图新方案

3秒完整保存&#xff1a;颠覆传统的Full Page Screen Capture网页截图新方案 【免费下载链接】full-page-screen-capture-chrome-extension One-click full page screen captures in Google Chrome 项目地址: https://gitcode.com/gh_mirrors/fu/full-page-screen-capture-ch…...

WarcraftHelper完整指南:3步解决魔兽争霸3在现代电脑上的兼容性问题

WarcraftHelper完整指南&#xff1a;3步解决魔兽争霸3在现代电脑上的兼容性问题 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 还在为经典游戏《魔兽…...

3个核心创新让Tomato-Novel-Downloader实现小说下载全场景覆盖

3个核心创新让Tomato-Novel-Downloader实现小说下载全场景覆盖 【免费下载链接】Tomato-Novel-Downloader 番茄小说下载器不精简版 项目地址: https://gitcode.com/gh_mirrors/to/Tomato-Novel-Downloader 如何通过智能技术解决小说下载中的速度、格式与稳定性难题 一、…...

OpenClaw实操指南09|云端部署实战:腾讯云+OpenClaw,打造7×24小时不断线AI助手

很多人第一次用OpenClaw&#xff0c;是在自己电脑上跑的。 用着挺爽——但只要关机&#xff0c;AI助手就断了。出门在路上&#xff0c;飞书消息发出去&#xff0c;没有回应。 本地部署的致命缺陷&#xff1a;你不在&#xff0c;它也不在。 这篇教程解决这个问题。用腾讯云轻…...

Creo混合与扫描混合实战:从基础到高级建模技巧

1. Creo混合与扫描混合功能入门指南 第一次打开Creo的混合功能时&#xff0c;我完全被那些参数搞懵了。后来才发现&#xff0c;这个看似复杂的功能其实就像搭积木一样简单。混合建模的核心思想就是把不同形状的截面按照特定规则连接起来&#xff0c;形成三维实体。比如你想做个…...