Tomcat 源码启动

news2024/11/25 17:03:47

要想学习 Tomcat 原理,看源码是最直接的方式,而想要理解源码,我们要想把它在本地跑起来。

下载源码

到 Tomcat 的官网 http://tomcat.apache.org 上下载 Tomcat 的源码
在这里插入图片描述

下载下来是一个压缩包文件
在这里插入图片描述

解压之后目录结构如下
在这里插入图片描述

用IDEA打开

在根目录用 IDEA 打开,Tomcat 是用 Ant 构建的,所以我们要把它改成 Maven 项目。用 Idea 打开之后如下,在根目录下创建 pom.xml 文件。

在这里插入图片描述

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>org.apache</groupId>
  <artifactId>tomcat</artifactId>
  <name>apache-tomcat-8.5.57</name>
  <version>8.5.57</version>

  <build>
    <finalName>Tomcat-8.5.57</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.5.1</version>
        <configuration>
          <encoding>UTF-8</encoding>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
    </plugins>
  </build>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.12</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.easymock</groupId>
      <artifactId>easymock</artifactId>
      <version>3.4</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.apache.ant</groupId>
      <artifactId>ant</artifactId>
      <version>1.10.0</version>
    </dependency>
    <dependency>
      <groupId>wsdl4j</groupId>
      <artifactId>wsdl4j</artifactId>
      <version>1.6.2</version>
    </dependency>
    <dependency>
      <groupId>javax.xml</groupId>
      <artifactId>jaxrpc</artifactId>
      <version>1.1</version>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jdt.core.compiler</groupId>
      <artifactId>ecj</artifactId>
      <version>4.6.1</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.glassfish/javax.xml.rpc -->
    <dependency>
      <groupId>org.glassfish</groupId>
      <artifactId>javax.xml.rpc</artifactId>
      <version>3.0.1-b03</version>
    </dependency>

    <dependency>
      <groupId>com.unboundid</groupId>
      <artifactId>unboundid-ldapsdk</artifactId>
      <version>6.0.3</version>
    </dependency>

  </dependencies>
</project>

标记项目的源码目录和测试源码目录

在这里插入图片描述

这是项目就已经被我们改造成 Maven 项目了,点击刷新图标就会下载所有的依赖项

在这里插入图片描述

配置并启动

idea项目的启动配置

在这里插入图片描述

  • Tomcat 的启动类是:org.apache.catalina.startup.Bootstrap

  • 配置虚拟机参数:

    -Dcatalina.home=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src
    -Dcatalina.base=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src
    -Djava.endorsed.dirs=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\endorsed
    -Djava.io.tmpdir=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\temp
    -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager
    -Djava.util.logging.config.file=D:\下载\apache-tomcat-8.5.84-src\apache-tomcat-8.5.84-src\conf\logging.properties
    -Duser.language=en
    -Duser.region=US
    

    注意,里面的目录是你解压缩 Tomcat 源码包的目录,如果你的目录不一样需求修改。

  • org.apache.catalina.startup.ContextConfig.java 中的 webConfig(); 后面加上一段代码 context.addServletContainerInitializer(new JasperInitializer(),null);,它的作用是加载 org.apache.jasper.servlet.JasperInitializer,如果不加这段代码,Tomcat 的欢迎页面会报错。

然后就可以启动 Tomcat 了,Tomcat 的默认端口号是 8080。启动后输出日志如下:
在这里插入图片描述

启动成功后在本地使用浏览器访问 http://localhost:8080 访问 Tomcat
在这里插入图片描述

参考:
https://juejin.cn/post/6872515297618706446
https://www.cnblogs.com/wk-missQ1/p/13138720.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193697.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

redis集群管理工具HHDBCS

参考地址: HHDBCS下载地址 Redis教程 1 快速介绍 1.1 什么是HHDBCS&#xff1f; HHDBCS是恒辉信达公司推出的通用数据库管理桌面工具&#xff0c;专为简化数据库的管理及数据管理成本而设计&#xff0c;让用户通过统一的桌面视图管理成千上万的异构数据库实例。 它采用了…

【Feign】Spring框架集成Feign

Spring框架集成Feign1、Feign-简介2、spring-cloud快速整合OpenFeign3、Feign日志4、Feign契约配置5、Feign配置超时时间6、Feign拦截器7、Feign断路器1、Feign-简介 Feign是Neflix开发的声明式、模块化的HTTP客户端&#xff0c;集成了Ribbon、RestTemplate实现了负载均衡的执…

快收藏,2023有这些财务分析模板就够了

相信很多的财务人都才刚刚经历一个兵荒马乱的年终&#xff0c;各种核算、整理、分析&#xff0c;工作量直线上升&#xff0c;说不定加班几点半个月都未必能歇一下。但不用担心&#xff0c;在接下来的2023里&#xff0c;可以通过BI财务分析报表模板来高效解决这些问题。 BI软件…

[python][VTK]vtk安装后测试代码

测试vtk版本为9.2.5 import vtk cone_a vtk.vtkConeSource() coneMapper vtk.vtkPolyDataMapper() coneMapper.SetInputConnection(cone_a.GetOutputPort()) coneActor vtk.vtkActor() coneActor.SetMapper(coneMapper) ren1 vtk.vtkRenderer() ren1.AddActor(coneActor…

黑马点评项目要点内容总结【面试用】

小众点评项目要点 文章目录小众点评项目要点1.使用Redis代替Session登录1.1 Session登录存在的问题1.2 使用Redis代替Session登录分析1.3 使用Redis登录的流程1.4 解决Redis中有效期问题2.使用Redis作为缓存2.1 为什么使用缓存2.2 缓存策略2.3 解决缓存穿透2.4 解决缓存雪崩2.5…

熵值法原理及python实现 附指标编制案例

文章目录1.简单理解 信息熵2.编制指标 &#xff08;学术情景应用&#xff09;3.python实现3.1 数据准备3.2 数据预处理3.3 熵值、权重计算3.4 编制综合评价指标熵值法也称熵权法&#xff0c;是学术研究&#xff0c;及实际应用中的一种常用且有效的编制指标的方法。1.简单理解 信…

在数组中删除重复数字(详解)

前言&#xff1a;本期是关于删除重复数字的详解&#xff0c;今天你c了吗&#xff1f; 方法&#xff1a; 双指针 以一组数&#xff1a;3 4 1 0 0 2 3 1 1 2 为例删除重复的数字 step 1&#xff1a;排序 使用双下标法的前提是数组有序&#xff08;降序or升序&#xff09; 可以使…

MYSQL命令总结

一.库的操作 1.创建库 create database db1;//创建名为db1的数据库 create database db2 charsetutf8;//创建一个utf8字符集的db2数据库 create database db3 charsetutf8 collate utf8_general_ci;//创建一个使用utf字符集并带校对规则的db3数据库2.字符集和校验规则 show …

[redis+springboot]缓存sql执行结果

场景: 访问controller层(其实是service),需要将其结果缓存到redis,下一次直接从缓存找值,从而减少sql操作,减轻数据库压力技术: redis,springboot,jpa,mysql1, 新建项目2, 导入依赖<?xml version"1.0" encoding"UTF-8"?> <project xmlns"h…

懂了委托,才算真正入门C#

文章目录委托的概念多播委托拖动按钮前文提要&#xff1a;超快速成&#xff0c;零基础掌握C#开发中最重要的概念抽丝剥茧&#xff0c;C#面向对象快速上手Winform&#xff0c;最友好的桌面GUI框架 委托的概念 委托这个名字取的神乎其神的&#xff0c;但实质是函数式编程&#…

网络攻防技术--第五次作业

文章目录作业五一、 什么是恶意代码&#xff1f;恶意代码主要类型有哪些&#xff1f;二、 恶意代码的基本技术主要包括哪几种&#xff1f;三、 什么是特洛伊木马&#xff1f;有什么特点&#xff1f;四、 什么是计算机病毒&#xff1f;其有哪几个基本组成部分&#xff1f;五、 什…

项目管理工具能做什么 它给企业带来哪些作用

一个项目经理&#xff0c;如果要想管理好项目&#xff0c;那么一定要掌握项目管理的方法与工具。在项目管理过程中总会借助一些工具来掌控项目点点滴滴&#xff0c;这不仅可以提高团队的生产力和效率&#xff0c;还可以让项目组织在不同项目带来的影响变化中做好准备。 项目管…

每天一道大厂SQL题【Day03】订单量统计

每天一道大厂SQL题【Day03】订单量统计 大家好&#xff0c;我是Maynor。相信大家和我一样&#xff0c;都有一个大厂梦&#xff0c;作为一名资深大数据选手&#xff0c;深知SQL重要性&#xff0c;接下来我准备用100天时间&#xff0c;基于大数据岗面试中的经典SQL题&#xff0c…

SAP 自定义SQL编辑器

导语&#xff1a;自定义SQL编辑器&#xff0c;可使用SAP ABAP的OPEN SQL语法进行编辑&#xff0c;快速出具简单报表&#xff0c;基本具备与SAP中DB02相似的功能。 此资源其中有两个版本&#xff0c;一个版本是网上的代码资料&#xff0c;另一个版本是本人优化过后的&#xff0…

Gerrit3.4.1安装使用

环境依赖jdk11 安装jdk11&#xff1a; 下载&#xff1a; wget https://download.java.net/openjdk/jdk11/ri/openjdk-1128_linux-x64_bin.tar.gz解压&#xff1a; tar zxvf openjdk-1128_linux-x64_bin.tar.gzsudo update-alternatives --install /usr/bin/java java /home/je…

Fiddler抓包工具配置+Jmeter基本使用

目录 一、Fiddler抓包工具的配置和使用 局域网络配置# Fiddler配置# Fiddler抓包实例# 二、Jmeter的基本使用 Jmeter的安装配置# 第一个Jmeter脚本# 一、Fiddler抓包工具的配置和使用 在编写网关自动化脚本之前&#xff0c;得先学会如何抓包&#xff0c;这里以Fiddler为…

Docker容器及安装 01

前言 1.1 从环境配置说起 环境配置是软件开发的一大难题。开发、测试及运维人员需要相同的代码运行环境&#xff0c;如此一来就需要多次搭建环境&#xff0c;想想就觉得麻烦&#xff0c;实际上&#xff0c;在不了解docker等容器技术以前&#xff0c;还真就是这么干的&#xff…

2023年FOF/MOM基金研究报告

第一章 概况 FOF 是 Fund of Funds 的简称&#xff0c;即“基金中的基金”&#xff0c;是一种专门投资于其他投资基金的基金。FOF 并不直接投资股票或债券&#xff0c;其投资范围主要限于其他基金。按照募集方式&#xff0c;FOF 分为公募 FOF 和私募 FOF。 公募 FOF 是指将80…

python小游戏——飞机大战代码开源

♥️作者&#xff1a;小刘在这里 ♥️每天分享云计算网络运维课堂笔记&#xff0c;努力不一定有收获&#xff0c;但一定会有收获加油&#xff01;一起努力&#xff0c;共赴美好人生&#xff01; ♥️夕阳下&#xff0c;是最美的&#xff0c;绽放&#xff0c;愿所有的美好&#…

明细打印重影方案

一、问题描述生产上出现明细查询打印业务&#xff0c;部分客户打印数据时出现数据重叠现象&#xff0c;不利于客户使用&#xff0c;影响客户体验。二、问题原因对方户名公司名称字段目前没有限制&#xff0c;按照现有的分页处理机制&#xff0c;如果一页纸出现多个公司名称较长…