Tomcat 9.0.54源码环境搭建

一. 问什么要学习tomcat
        tomcat是目前非常流行的web容器,其性能和稳定性也是非常出色的,学习其框架设计和底层的实现,不管是使用、性能调优,还是应用框架设计方面,肯定会有很大的帮助

二. 运行源码

1.下载源码 

Tomcat各版本源码:https://archive.apache.org/dist/tomcat/

Tomcat安装包:https://tomcat.apache.org/

为什么又要下载源码,又要下载安装包?

源码中webapps是没有编译的,需要用安装包里的替换,并且Tomcat用的是ant+build.xml依赖管理,这种方式比较老,现在都用maven、gradle了,所以可以手动换成maven,但是有些包在maven仓库中找不到,可以从Tomcat安装包lib目录下获取。

2. 导入源码

  • 导入下载好的apache-tomcat-9.0.54-src,并导入IDEA,然后在根目录下新建lib目录,让后将tomcat安装包中的jasper.jar复制过来
  • 在根目录中添加pom.xml文件,并maven一下
  • 在org.apache.jasper.compiler中报错的内容注释掉
<?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.tomcat</groupId><artifactId>tomcat9</artifactId><name>tomcat9</name><version>9.0</version><build><finalName>tomcat9</finalName><sourceDirectory>java</sourceDirectory><!--<testSourceDirectory>test</testSourceDirectory>  test 下的有些文件报错,因此将test文件夹去掉了--><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.0</version><configuration><encoding>UTF-8</encoding><source>1.8</source><target>1.8</target></configuration></plugin><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-jar-plugin</artifactId><version>3.0.2</version></plugin></plugins></build><dependencies><dependency><groupId>org.apache.ant</groupId><artifactId>ant</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.apache.ant</groupId><artifactId>ant-apache-log4j</artifactId><version>1.9.5</version></dependency><dependency><groupId>org.apache.ant</groupId><artifactId>ant-commons-logging</artifactId><version>1.9.5</version></dependency><dependency><groupId>javax.xml.rpc</groupId><artifactId>javax.xml.rpc-api</artifactId><version>1.1</version></dependency><dependency><groupId>wsdl4j</groupId><artifactId>wsdl4j</artifactId><version>1.6.2</version></dependency><dependency><groupId>org.eclipse.jdt.core.compiler</groupId><artifactId>ecj</artifactId><version>4.6.1</version></dependency><dependency><groupId>biz.aQute.bnd</groupId><artifactId>biz.aQute.bndlib</artifactId><version>5.2.0</version><scope>provided</scope></dependency></dependencies>
</project>
  •  此时启动tomcat时,会有乱码,处理方式是

​​​​​​​

三、总结:如何阅读源码
搭建源码阅读环境必不可少,一定要做到手里有书,眼里有源码,心里有debug。

书,具有引导和总结作用,Tomcat源码那么多,那么复杂,不知道从哪里开始读。可以先跟着书的目录,按章学习,从整体到细节,从外到内,从简到繁,快速建立起一个Tomcat基础架构网络:

Tomcat是一个HTTP服务器和Servlet容器,有两个核心组件:连接器和容器,链接器实现HTTP功能,容器实现装载Servlet的功能。
一个Server可以包含多个Service,一个Service包含多个Conector和一个Engine,一个Engine包含多个Host,一个Host包含多个Context,一个Context包含多个Wrapper,这些容器名称和层次关系是不是有些晕?一个Context就是一个熟悉的web服务,Wrapper可以理解为对Servlet的包装。


请求的响应从连接器–>容器–>连接器。连接器负责对外交流,接收请求做一些封装,然后交由容器处理,容器处理完后再返回给连接器做响应。


连接器、容器,从哪个开始学习呢?连接器涉及网络编程,HTTP协议等;容器里有类加载、各种设计模式,职责链、观察者(事件监听)模式用的最多,容易理解吸收。如果对网络编程(NIO、net、HTTP)不是很熟悉的,可以先从容器学起,如果对RPC框架Netty等熟悉的,那连接器就简单了。
带着任务和问题研究Tomcat源码。把整个Tomcat源码学习的艰巨工程划分为多个小任务,带着疑问去研究学习。比如可以先从日常熟悉的server.xml配置开始,搞懂里面的配置,为什么这么配置,这个路径为什么这样;带着问题就是Tomcat如何做热加载?如何部署加载一个web项目?如何处理一个请求?Tomcat生命周期是怎么实现的,如何做到一键启停?Tomcat为什么要自定义类加载器,如何打破双亲委派?等等。带着任务和问题,及时正向反馈,才能坚持把Tomcat这块硬骨头啃下来。
学习Tomcat源码也有一段时间了,中间半途而废多次,摸摸索索总结出一套适合自己的学习方式,真的,万事开头难,好的开头,成功一半,好的方法,事半功倍。后面会把我学习Tomcat源码的心得、过程持续分享出来,希望对你有用。

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

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

相关文章

DeepMind 推出 OPRO 技术,可用于优化 ChatGPT 提示

本心、输入输出、结果 文章目录 DeepMind 推出 OPRO 技术&#xff0c;可用于优化 ChatGPT 提示前言消息摘要OPRO的工作原理DeepMind的研究相关链接花有重开日&#xff0c;人无再少年实践是检验真理的唯一标准 DeepMind 推出 OPRO 技术&#xff0c;可用于优化 ChatGPT 提示 编辑…

股票池(三)

3-股票池 文章目录 3-股票池一. 查询股票池支持的类型二. 查询目前股票池对应的股票信息三 查询股票池内距离今天类型最少/最多的股票数据四. 查询股票的池统计信息 一. 查询股票池支持的类型 接口描述: 接口地址:/StockApi/stockPool/listPoolType 请求方式&#xff1a;GET…

Figma 是什么软件?为什么能被Adobe收购

很多人一定早就听说过Figma的名字了。看到很多设计同行推荐&#xff0c;用了很久&#xff0c;疯狂的安利朋友用。是什么让这么多设计师放弃了FigmaSketch的魅力&#xff1f;下面的内容将详细分享一些与Figma相关的知识点&#xff0c;并介绍这个经常听到但不熟悉的工具。 Figma…

MindSpore基础教程:使用 MindCV和 Gradio 创建一个图像分类应用

MindSpore基础教程&#xff1a;使用 MindCV和 Gradio 创建一个图像分类应用 官方文档教程使用已经弃用的MindVision模块&#xff0c;本文是对官方文档的更新 在这篇博客中&#xff0c;我们将探索如何使用 MindSpore 框架和 Gradio 库来创建一个基于深度学习的图像分类应用。我…

股票基础数据(二)

二. 股票基础数据 文章目录 二. 股票基础数据一. 查询股票融资信息数据二. 查询所有的股票信息三. 查询所有的股票类型信息四. 根据类型查询所有的股票数据信息五. 查询股票当前的基本信息六. 查询股票的K线图, 返回对应的 base64 信息七. 展示股票的K线图数据, 对应的是数据信…

大模型的实践应用7-阿里的多版本通义千问Qwen大模型的快速应用与部署

大家好,我是微学AI,今天给大家介绍一下大模型的实践应用7-阿里的多版本通义千问Qwen大模型的快速应用与部署。阿里云开源了Qwen系列模型,即Qwen-7B和Qwen-14B,以及Qwen的聊天模型,即Qwen-7B-Chat和Qwen-14B-Chat。通义千问模型针对多达 3 万亿个 token 的多语言数据进行了…

LLM之Prompt(二):清华提出Prompt 对齐优化技术BPO

论文题目&#xff1a;《Black-Box Prompt Optimization: Aligning Large Language Models without Model Training》 论文链接&#xff1a;https://arxiv.org/abs/2311.04155 github地址&#xff1a;https://github.com/thu-coai/BPO BPO背景介绍 最近&#xff0c;大型语言模…

米哈游大数据云原生实践

云布道师 近年来&#xff0c;容器、微服务、Kubernetes 等各项云原生技术的日渐成熟&#xff0c;越来越多的公司开始选择拥抱云原生&#xff0c;并将企业应用部署运行在云原生之上。随着米哈游业务的高速发展&#xff0c;大数据离线数据存储量和计算任务量增长迅速&#xff0c…

中大型企业网搭建(毕设类型)

毕业设计类别 某大学网络规划与部署 目录 某大学网络规划与部署 第一章项目概述 1.1 项目背景 1.2 网络需求分析 第二章网络总体设计方案 2.1 网络整体架构 2.2 网络设计思路 第三章 网络技术应用 3.1 DHCP 3.2 MSTP 3.3 VRRP 3.4 OSPF 3.5 VLAN 3.6 NAT 3.7 WLAN 3…

78基于matlab的BiLSTM分类算法,输出迭代曲线,测试集和训练集分类结果和混淆矩阵

基于matlab的BiLSTM分类算法&#xff0c;输出迭代曲线&#xff0c;测试集和训练集分类结果和混淆矩阵&#xff0c;程序有详细注释&#xff0c;数据可更换自己的&#xff0c;程序已调通&#xff0c;可直接运行。

全面解析IEC 60364三种接地系统的概念、特点及应用

根据IEC 60364规定的各种保护方式、术语概念&#xff0c;低压配电系统按接地方式的不同分为三类&#xff0c;即 TT 、 TN 和 IT 系统。 1.TT系统TT grounding system TT供电系统&#xff1a;是指将电气设备的金属外壳直接接地的保护系统&#xff0c;称为保护接地系统&#xff…

C#WPF用户控件及自定义控件实例

本文演示C#WPF自定义控件实例 用户控件(UserControl)和自定义控件(CustomControl)都是对UI控件的一种封装方式,目的都是实现封装后控件的重用。 只不过各自封装的实现方式和使用的场景上存在差异。 1 基于UserControl 创建 创建控件最简单一个方法就是基于UserControl …

如何使用API接口对接淘宝获取店铺销量排序,店铺名称等参数

要接入淘宝官方开放平台API接口获取店铺销量排序&#xff0c;店铺名称等参数&#xff0c;需要按照以下步骤进行操作&#xff1a; 找到可用的API接口&#xff1a;首先&#xff0c;需要找到支持查询店铺信息的API接口。可以在电商数据平台的开放平台上查找相应的API接口。注册并…

YOLOv8更换骨干网络HorNet:递归门控卷积的高效高阶空间交互——涨点神器!

🗝️YOLOv8实战宝典--星级指南:从入门到精通,您不可错过的技巧   -- 聚焦于YOLO的 最新版本, 对颈部网络改进、添加局部注意力、增加检测头部,实测涨点 💡 深入浅出YOLOv8:我的专业笔记与技术总结   -- YOLOv8轻松上手, 适用技术小白,文章代码齐全,仅需 …

【深度学习实验】注意力机制(四):点积注意力与缩放点积注意力之比较

文章目录 一、实验介绍二、实验环境1. 配置虚拟环境2. 库版本介绍 三、实验内容0. 理论介绍a. 认知神经学中的注意力b. 注意力机制 1. 注意力权重矩阵可视化&#xff08;矩阵热图&#xff09;2. 掩码Softmax 操作3. 打分函数——加性注意力模型3. 打分函数——点积注意力与缩放…

用户增长常见分析模型

一、用户增长是什么 用户增长基本上会涉及生意场上的各行各业&#xff0c;你开个店面希望有更多的客户光顾&#xff0c;你做了个APP希望有更多的用户经常使用&#xff0c;你搭建了个电商平台希望有更多的人下单买东西。 用户增长&#xff0c;即以提升用户LTV为目的&#xff08…

Self-Supervised Exploration via Disagreement论文笔记

通过分歧进行自我监督探索 0、问题 使用可微的ri直接去更新动作策略的参数的&#xff0c;那是不是就不需要去计算价值函数或者critic网络了&#xff1f; 1、Motivation 高效的探索是RL中长期存在的问题。以前的大多数方式要么陷入具有随机动力学的环境&#xff0c;要么效率…

应用在金银精炼控制系统中的Modbus转Profinet网关案例

应用在金银精炼控制系统中的Modbus转Profinet网关案例 Modbus转Profinet网关&#xff08;XD-MDPN100&#xff09;能够支持多种通信协议和接口&#xff0c;满足不同设备和系统的需求。在金银精炼控制系统中使用&#xff0c;通过控制PID阀门的大小&#xff0c;将1200plc与PID控制…

Git 远程仓库(Github)

目录 添加远程库 查看当前的远程库 提取远程仓库 推送到远程仓库 删除远程仓库 Git 并不像 SVN 那样有个中心服务器。 目前我们使用到的 Git 命令都是在本地执行&#xff0c;如果你想通过 Git 分享你的代码或者与其他开发人员合作。 你就需要将数据放到一台其他开发人员…

【paddlepaddle】

安装paddlepaddle 报错 ImportError: /home/ubuntu/miniconda3/envs/paddle_gan/bin/../lib/libstdc.so.6: version GLIBCXX_3.4.30 not found (required by /home/ubuntu/miniconda3/envs/paddle_gan/lib/python3.8/site-packages/paddle/fluid/libpaddle.so) 替换 /home/ubu…