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 后加载的类会覆盖前面加载的同名类‌。

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

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

相关文章

OLED显示图片,文字

显示图片 1.这是随便一张的图片,自己可以随便截图一张 2.单击图片,右边选择编辑 3.如下操作 4.然后,这个水平和垂直的值的设置要根据你所使用的屏幕有多少个像素点,我当前使用的是0.96寸OLED屏幕,也就是12864&#x…

猿辅导持续布局AI赋能教育领域,助推教育行业数字化转型

近日,由人民网主办的“AI之夜”活动在北京隆重举行。“AI之夜”活动旨在展示中国在人工智能领域的最新成果和创新应用,推动行业的交流与合作。活动现场,来自不同领域的专家们通过主题演讲、圆桌讨论和案例分享等形式,全面呈现了中…

Zotero版本兼容问题,无法安装插件“%s”

1.问题:zotero-better-notes与zotero版本不兼容 安装插件zotero-better-notes时,出现插件安装失败提示:无法安装插件“%S"。他可能无法与该版本的Zotero兼容 zotero-better-notes:是一款论文阅读笔记插件,之前一…

Profinet IO从站数据 转 opc ua项目案例

目录 1 案例说明 2 VFBOX网关工作原理 3 准备工作 4 使用PRONETA软件获取PROFINET IO从站的配置信息 5 设置网关采集PROFINETIO从站设备数据 6 启动OPC UA协议转发采集的数据 7 选择槽号和数据地址 8 选择子槽号 9 案例总结 1 案例说明 设置网关采集ProfinetIO从站设…

android studio 读写文件操作(应用场景二)

android studio版本:2023.3.1 patch2 例程:readtextviewIDsaveandread 本例程是个过渡例程,如果单是实现下图的目的有更简单的方法,但这个方法是下一步工作的基础,所以一定要做。 例程功能:将两个textvi…

基于SSM框架企业人事管理系统的设计与实现

系统合集跳转 源码获取链接 一、系统环境 运行环境: 最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。 IDE环境: Eclipse,Myeclipse,IDEA或者Spring Tool Suite都可以 tomcat环境: Tomcat 7.x,8.x,9.x版本均可 操作系统…

百度智能云 CHPC: 使用 BtuneAK对基因测序软件进行加速

背景 本文主要介绍在 CHPC 平台使用 BtuneAK 自动化加速组件,可以直接对BWA、FastQC、Picard、Trimmomatic等业务端到端时长加速。 Btune 简单介绍 BtunePK介绍 BtunePK 是百度自研的一款性能分析和调优工具,兼容Intel、AMD、ARM三个CPU平台&#xff0…

Power BI - 批量导入数据

1.简单介绍 假定已经使用Power Automate Desktop(微软的RPA产品,是Power Platform平台的其中一个产品)从福布斯中文网获取了各地区的2024年的财富数据如下, 现在想批量导入数据到Power BI中,分析一下各地区的产业以及财富情况 2.具体说明 …

实现跨平台 SSH 连接:从 macOS 到 Windows WSL 的完整解决方案20241203

🌐 实现跨平台 SSH 连接:从 macOS 到 Windows WSL 的完整解决方案 ✨ 引言 随着跨平台开发的普及,开发者经常需要在多系统环境中切换和协作。尤其是在 macOS 和 Windows 混合使用的开发环境中,通过 SSH 远程访问和管理 Windows …

【css】基础(二)

本专栏内容为:前端专栏 记录学习前端,分为若干个子专栏,html js css vue等 💓博主csdn个人主页:小小unicorn ⏩专栏分类:css专栏 🚚代码仓库:小小unicorn的代码仓库🚚 &a…

2024通信工程师-中级-互联网技术备考经验

考试简介 全国通信专业技术人员职业水平考试,是由国家人力资源和社会保障部、工业和信息化部领导下的国家级考试。根据原人事部、信息产业部文件(国人部发[2006]10号),通信专业技术人员职业水平评价,纳入全国专业技术人…

智能文档解析综述:结构化信息提取的技术、挑战与前景

综述论文:https://arxiv.org/abs/2410.21169 摘要 文档解析对于将非结构化和半结构化文档(如合同、学术论文和发票)转换为结构化、机器可读的数据至关重要。通过从非结构化输入中提取可靠的结构化数据,文档解析为众多应用提供了极…

【Web】AlpacaHack Round 7 (Web) 题解

Treasure Hunt flag在md5值拼接flagtxt的文件里,如 d/4/1/d/8/c/d/9/8/f/0/0/b/2/0/4/e/9/8/0/0/9/9/8/e/c/f/8/4/2/7/e/f/l/a/g/t/x/t 访问已经存在的目录状态码是301 访问不存在的目录状态码是404 基于此差异可以写爆破脚本 这段waf可以用url编码绕过 做个lab …

操作系统——文件系统

笔记内容及图片整理自XJTUSE “操作系统” 课程ppt,仅供学习交流使用,谢谢。 文件系统是操作系统中以文件方式管理计算机软件资源的软件和被管理的文件和数据结构(如目录和索引表等)的集合。从系统角度来看,文件系统是…

java面向对象实验——扫雷+24点

扫雷 窗口绘制: GameWin package com.sxt;import javax.swing.*;public class GameWin extends JFrame {void launch(){this.setVisible(true);this.setSize(500, 500);this.setLocationRelativeTo(null);this.setTitle("SWE23070扫雷游戏");this.setD…

GPU 调度策略架构与CUDA运行机制(二)

市面上有很多GPU厂家,他们产品的软硬件架构各不相同,但是核心往往差不多,整明白了一个基本上就可以触类旁通了。针对当前gpu底层的一些架构以及硬件层一些调度策略的话估计大部分人就很难说的上熟悉了,这个不是大家的错&#xff0…

ddos攻击防御的方法有哪些

DDoS攻击,即分布式拒绝服务攻击(Distributed Denial of Service),是一种恶意的网络攻击方式,旨在通过发送大量流量或请求到目标服务器、服务或网络,使其资源耗尽,无法处理合法用户的请求,从而导致服务中断或…

Python + Playwright:集成 Applitools 进行视觉回归测试(快速入门)

集成 Applitools 进行视觉回归测试(快速入门) 简介Applitools 的核心特点Applitools 的应用场景1. 准备工作2. 获取示例项目2.1 下载示例代码2.2 安装依赖2.3 选择测试运行方式3. 代码解析3.1 测试用例示例4. 运行测试4.1 设置 Applitools API 变量4.2 设置 Applitools Eyes …

RuoYi中数据分页功能实现的步骤(nvliz)

目录 前言 数据分页的作用 RuoYi中的实现步骤 前端的显示界面(实例介绍) 源码分析(前端) Pagination(分页组件)介绍 前端:getList()(方法源码分析) 源码分析(后端) 后端:List()…

HarmonyOS 5.0应用开发——全局广播的使用

【高心星出品】 文章目录 全局广播的使用公共事件接受系统公共事件原理 发布与订阅自定义公共事件订阅系统事件 全局广播的使用 全局广播可以用来做应用间通信,进程间通信,包含订阅、发布等功能。 公共事件 CES(Common Event Service&…