tomcat 运行加载机制解析

 tomcat 运行加载机制

从tomcat jar包的加载顺序:

tomcat的具体运行加载 可以从 start、setclasspath、catalina文件中看出来:

start.bat执行 去找bin目录下的catalina.bat,catalina 或去找 bin\setenv.bat以获取标准环境变量,然后去找bin\setclasspath.bat以获取标准java环境变量,bin\setclasspath.bat 文件里去找环境变量: 

JRE_HOME 以及JAVA_HOME,找不到 bin\java.exe、javaw.exe、jdb.exe、javac.exe 都说 JAVA_HOME环境变量不正确。应该指向JDK或者JRE:

如果JRE_HOME没有给出,就默认为JAVE_HOME,JRE目录下 没有 java.exe、javaw.exe 就提示 JRE_HOME环境变量没有设置好。。。tomcat也运行不起来。

setclasspath.bat中指定运行的java.exe、 jdb.exe的路径。

当指定要运行的这个setclasspath文件不存在时也会报错 :找不到xxxx \bin\setclasspath.bat:

调用setclasspath异常,tomcat也启动不起来。

正常调用setclasspath之后就会根据情况添加额外的jar包到CLASSPATH这个环境变量上,并且过程中不使用逗号分隔,添加 bin\tomcat-juli.jar 以及 bin\tomcat-juli.jar到 CLASSPATH环境变量上:

设置完 CLASSPATH参数,将jar包加入之后,使用conf\logging.properties 的配置作为日志配置:

在这里出现了一个CATALINA_BASE环境变量。

CATALINA_BASE 与CATALINA_HOME的区别?

CATALINA_HOME:指向 tomcat的安装根目录,主要包括了Tomcat的二进制文件和脚本,CATALINA_HOME就指向这些目录。

CATALINA_BASE:指向tomcat实例的工作目录,一个安装目录可以运行多个tomcat实例,而不需要每个实例都安装一次或者复制多个副本。

Tomcat每个运行实例需要使用自己的conf、logs、temp、webapps、work和shared目录,通过将conf、logs、temp webapps、work 以及shared文件夹,放入某个目录,然后将CATALINA_BASE环境变量指向该目录,并设置实例端口与已经存在的端口不一样,从而实现创建新的tomcat实例。

%CATALINA_BASE%\conf\logging.properties 文件设定tomcat的四个日志类型的文件前缀: 

同时设定日志级别:


设定日志情况之后,就开始 使用配置好的CATALINA_BASE、CATALINA_HOME、JRE_HOME、JAVA_HOME以及CLASSPATH等变量,

之后 就设定 jpda服务

之后就是根据命令行输入 确定执行的情况:

以catalina.bat start命令为例子:

设置了tomcat实例的conf/catalina.policy路径,该策略文件内容如下:

分别给 JAVA_HOME下的lib目录的javac以全部权限、JAVA_HOME/jre/ib/ext 权限以分享系统扩展,以及 JAVA_HOME/jre/../lib javac在jre目录下的全部权限、JAVA_HOME/jre/lib/ext 目录全部的权限....

以及 tomcat 示例一系列的 文件读写权限设置:如jar包 的全部权限、文件权限、 日志配置文件 只读权限、日志的可读可写权限等等。。。

类的读权限、jar的所有权限

在 catalina.policy文件里有如下介绍:

可以在catalina.policy文件里 添加 grant 语句来为特定的程序添加额外权限,比如 因公程序代码库、应用的WEB-INF/classes目录或者lib目录中的jar包,同时还可以添加jdbc驱动的权限等等。

基本上能确认 加载顺序为:

tomcat的运行需要java 运行时环境,即常说的jdk \jre等,所以会优先加载

  1. 首先是$JAVA_HOME/jre/lib/ext/下的jar文件‌:这是Java运行时环境的扩展目录,Tomcat会首先加载此目录下的jar文件‌。
  2. 接着是TOMCAT_HOME/lib中的jar包‌:这是Tomcat自身的库文件,会被优先加载‌。
  3. 然后是WEB-INF/lib中的jar包‌:每个Web应用都有自己的WEB-INF/lib目录,Tomcat在加载Web应用时会加载此目录下的jar文件‌。
  4. 最后是WEB-INF/classes中的.class文件‌:这些是Web应用自己的类文件,会被最后加载‌。

注意,tomcat 后加载的类会覆盖前面加载的同名类‌。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习 | 基于Lasso回归和随机森林的上海链家二手房房价预测】

文章目录 🏳️‍🌈 1. 导入模块🏳️‍🌈 2. Pandas数据处理2.1 读取数据2.2 查看数据信息2.3 去除重复数据2.4 去除缺失数据2.5 面积、价格、单价、楼层、建筑时间数据提取2.6 朝向数据处理 🏳️‍🌈 3. 特…

npm, yarn, pnpm之间的区别

前言 在现代化的开发中,一个人可能同时开发多个项目,安装的项目越来越多,所随之安装的依赖包也越来越臃肿,而且有时候所安装的速度也很慢,甚至会安装失败。 因此我们就需要去了解一下,我们的包管理器&#…

使用Java将PDF文件解析成Excel文件

安装pom依赖 <!-- 解析pdf--><dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.27</version> <!-- 请检查并使用最新版本 --></dependency>测试读取pdf文件…

Celery使用小结

介绍 Celery 是异步任务调度工具就&#xff0c;或分布式任务队列&#xff08;Distributed Task Queue&#xff09;&#xff0c;有多个worker。 Broker&#xff1a;中间人&#xff0c;所有任务放在broker中&#xff0c;worker到broker中提取任务执行。 这样系统为开环系统&am…

java注解(二):注解的解析以及应用场景、用注解和反射模拟junit框架代码演示

目录 1、什么是注解的解析&#xff1f; 2、解析注解的案例 1、自定义一个注解 2、在类和方法上使用自己定义的注解 3、解析注解 3、模拟Junit框架案例 1、自定义一个MyTest注解 2、定义一个测试类&#xff0c;使用自定义的注解 3、写一个启动类 本文章主要讲解什么是注…

VUE脚手架练习

脚手架安装的问题&#xff1a; 1.安装node.js,配置环境变量,cmd输入node -v和npm -v可以看到版本号&#xff08;如果显示不是命令&#xff0c;确认环境变量是否配置成功&#xff0c;记得配置环境变量之后重新打开cmd&#xff0c;再去验证&#xff09; 2.在安装cnmp时&#xf…

unity3d—demo(实现给出图集名字和图片名字生成对应的图片)

目录 实现给出图集名字和图片名字生成对应的图片&#xff1a; 代码示例&#xff1a; dic: 键 是图集名称 值是一个字典 该字典键是图片名称 值是图片&#xff0c;结构如图&#xff1a; 测试代码&#xff1a; 结果&#xff1a; SpriteRenderer 讲解&#xff1a; Resour…

国内外网络安全政策动态(2024年11月)

▶︎ 1.13项网络安全国家标准自11月1日起实施 11月1日起&#xff0c;《网络安全技术 信息技术安全评估准则》等13项网络安全国家标准开始实施&#xff0c;其中&#xff0c;《网络安全技术 信息技术安全评估准则 第1-5部分》《网络安全技术 信息技术安全评估方法》等6项推荐性国…

Modbus Poll的使用

最近从串口调试助手接触到了Modbus Poll&#xff0c;一开始用的时候有些生疏&#xff0c;了解之后不得不说真香。 相对于串口调试助手&#xff0c;有些设备厂家会给一些点表和指令码&#xff0c;有些也可以通过modbus协议解析出来&#xff0c;相对来说&#xff0c;使用Modbus …

写NFC标签支持Android安卓Ohos纯血鸿蒙唤醒微信小程序

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?spma21dvs.23580594.0.0.52de2c1b8bEEGz&ftt&id61539185785 Python languagecodestr "en".encode(gbk) titlestrself.lineEdit_title.text().strip().encode(gbk) uriheaderindex sel…

利用oracle spool配置数据导出脚本

一&#xff0c;spool配置项 set colsep |   //域输出分隔符 set echo off   //显示start启动的脚本中的每个sql命令&#xff0c;缺省为on set feedback off //回显本次sql命令处理的记录条数&#xff0c;缺省为on set heading off  //输出域标题&#xff0c;缺省为on…

单端和差分信号的接线法

内容来源&#xff1a;【单端信号 差分信号与数据采集卡的【RSE】【 NRES】【 DIFF】 模式的连接】 此篇文章仅作笔记分享。 单端输入 单端信号指的是输入信号由一个参考端和一个信号端构成&#xff0c;参考端一般是地端&#xff0c;信号就是通过计算信号端口和地端的差值所得…

前端基础——CSS

美化文档 HTML内部添加样式 本节我们来学习如何在标签中引入CSS样式。 1 在标签中添加声明 声明的关键字是style后接等号&#xff08;&#xff09;再接引号&#xff08;""&#xff09;&#xff0c;即style"" 具体声明如下&#xff1a; <input typ…

MATLAB 最小二乘点云拟合球 (89)

MATLAB 最小二乘点云拟合球 (89) 一、算法介绍二、算法实现1.代码2.结果这是缘,亦是最美的相见 一、算法介绍 球面拟合算法是一种通过数学方法将一组三维点(通常在三维空间中分布)拟合到一个理想的球形表面上。这个过程通常涉及使用最小二乘法来最小化实际数据点与拟合的…

安防视频监控平台Liveweb视频汇聚管理系统管理方案

智慧安防监控Liveweb视频管理平台能在复杂的网络环境中&#xff0c;将前端设备统一集中接入与汇聚管理。国标GB28181协议视频监控/视频汇聚Liveweb平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、…

elasticsearch-如何给文档新增/更新的字段

文章目录 前言elasticsearch-如何给文档新增/更新的字段1. 如何给某些文档新增/更新的字段2. 给所有文档添加/更新一个新的字段3. 测试 前言 如果您觉得有用的话&#xff0c;记得给博主点个赞&#xff0c;评论&#xff0c;收藏一键三连啊&#xff0c;写作不易啊^ _ ^。   而且…

浅谈网络 | 应用层之流媒体与P2P协议

目录 流媒体名词系列视频的本质视频压缩编码过程如何在直播中看到帅哥美女&#xff1f;RTMP 协议 P2PP2P 文件下载种子文件 (.torrent)去中心化网络&#xff08;DHT&#xff09;哈希值与 DHT 网络DHT 网络是如何查找 流媒体 直播系统组成与协议 近几年直播比较火&#xff0c;…

性能测试基础知识jmeter使用

博客主页&#xff1a;花果山~程序猿-CSDN博客 文章分栏&#xff1a;测试_花果山~程序猿的博客-CSDN博客 关注我一起学习&#xff0c;一起进步&#xff0c;一起探索编程的无限可能吧&#xff01;让我们一起努力&#xff0c;一起成长&#xff01; 目录 性能指标 1. 并发数 (Con…

【机器学习】机器学习的基本分类-监督学习-决策树-ID3 算法

ID3&#xff08;Iterative Dichotomiser 3&#xff09;是决策树的一种构造算法&#xff0c;由 Ross Quinlan 在 1986 年提出。它主要用于分类问题&#xff0c;通过信息增益选择特征来构建决策树。ID3 假设数据是离散型特征&#xff0c;且不支持连续型数据。 1. 核心思想 划分标…

记录:ubuntu 使用chattts的过程。

你知道什么是穷人吗&#xff1f;穷人就是没钱还想学习。 git GitHub - 2noise/ChatTTS: A generative speech model for daily dialogue. 因为所以。cosyvoice&#xff0c;gpt-s . 0.先找一个目录吧。 1.命令行模式 duyichengduyicheng-computer:~/gitee$ git clone https:…