Tomcat的类加载器

详情可以参考:https://tomcat.apache.org/tomcat-10.1-doc/class-loader-howto.html

简要说明

Tomcat安装了多种类加载器,以便容器的不同部分、容器中的应用访问能够不同的类和资源。
在Java环境中,类加载器被组织为父-子树的形式。通常情况下,如果一个类加载器被要求加载一个类或者资源,它会先委托它的父类加载器去寻找并加载,如果父类加载器没有找到要加载的类或者资源,类加载器才会从它自身的库中去寻找。但是,web应用的类加载器默认与此委托模型不同。

当Tomcat启动的时候,创建如下父子关系的类加载器,其中上面是父、下面是子:
(图形来自Tomcat官网:https://tomcat.apache.org/tomcat-10.1-doc/class-loader-howto.html)
在这里插入图片描述

如果还启用了Server 或/和 Shared类加载器,会是下面的形式:
在这里插入图片描述

类加载器的定义

Bootstrap类加载器

Bootstrap加载Java虚拟机提供的基本运行时类、及来自系统扩展目录($JAVA_HOME/jre/lib/ext)下面JAR文件中的类。

System类加载器

System正常是加载CLASSPATH 环境变量下面的类。加载的这些类对Tomcat的内部类和web应用可见。但是,标准的Tomcat启动脚本($CATALINA_HOME/bin/catalina.sh 或者 %CATALINA_HOME%\bin\catalina.bat)完全忽略CLASSPATH环境变量的内容,而是从下面的库中加载类:

$CATALINA_HOME/bin/bootstrap.jar
$CATALINA_BASE/bin/tomcat-juli.jar 或者$CATALINA_HOME/bin/tomcat-juli.jar
$CATALINA_HOME/bin/commons-daemon.jar

Common类加载器

Common加载另外的一些类,这些类对Tomcat的内部类和所有web应用可见。Common类加载器搜索的位置在$CATALINA_BASE/conf/catalina.properties文件中用属性common.loader定义。通常,应用的类不应该放在这里。
在这里插入图片描述

common.loader="${catalina.base}/lib","${catalina.base}/lib/*.jar","${catalina.home}/lib","${catalina.home}/lib/*.jar"

Common类加载器默认按照顺序搜索如下位置:

$CATALINA_BASE/lib下面没有打包的类和资源
$CATALINA_BASE/lib下面的JAR文件
$CATALINA_HOME/lib下面没有打包的类和资源
$CATALINA_HOME/lib下面的JAR文件

WebappX类加载器

WebappX:Tomcat为容器中的每个web应用创建一个类加载器。这个类加载器加载web应用下面 /WEB-INF/classes目录下面没有打包的类和资源、 /WEB-INF/lib目录下面JAR文件中的类和资源。这些类和资源仅对该web应用可见,对其它web应用不可见。
这个加载器先自己加载,而不把加载请求委托给父类加载器,这一点与其它类加载器不同。当然,还是有一些例外的,例如:属于JRE的基类部分的不能被覆盖、对于Tomcat 实现的Jakarta EE API类总是先委托(Servlet, JSP, EL, WebSocket)

从web应用的角度来看,类和资源加载按照下面的位置顺序查找:
1)Java虚拟机的Bootstrap类
2)web应用的/WEB-INF/classes目录
3)web应用的/WEB-INF/lib/*.jar
4)System类加载器加载的类
5)Common 类加载器加载的类

如果 web应用类加载器使用 <Loader delegate="true"/> 属性配置(https://tomcat.apache.org/tomcat-10.1-doc/config/loader.html),查找位置顺序变为如下:
1)Java虚拟机的Bootstrap类
2)System类加载器加载的类
3)Common 类加载器加载的类
4)web应用的/WEB-INF/classes目录
5)web应用的/WEB-INF/lib/*.jar

Server类加载器

Server类加载器:这个类加载器只对Tomcat内部类可见,对web应用完全不可见。搜索位置在conf/catalina.properties文件中用server.loader属性定义。

Shared 类加载器

Shared 类加载器:对所有web应用可见。搜索位置在conf/catalina.properties文件中用shared.loader属性定义。这通常用来在所有web应用之间共享代码。但是,对这些被加载的类的更新,需要Tomcat重启才能生效。

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

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

相关文章

文件包含漏洞培训

CTF介绍 MISC(Miscellaneous)类型,即安全杂项,题目或涉及流量分析、电子取证、人肉搜索、数据分析等等。CRYPTO(Cryptography)类型,即密码学,题目考察各种加解密技术,包括古典加密技术、现代加密技术甚至出题者自创加密技术。PWN类型,PWN在黑客俚语中代表着攻破、取得权限…

技术分享 | app自动化测试(Android)-- 属性获取与断言

断言是 UI 自动化测试的三要素之一&#xff0c;是 UI 自动化不可或缺的部分。在使用定位器定位到元素后&#xff0c;通过脚本进行业务操作的交互&#xff0c;想要验证交互过程中的正确性就需要用到断言。 常规的UI自动化断言 分析正确的输出结果&#xff0c;常规的断言一般包…

Qt实现动态桌面小精灵(含源码)

目录 一、设计思路 二、部分源码演示 三、源码地址 🌈write in front🌈 🧸大家好,我是三雷科技.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由三雷科技原创 CSDN首发🐒 如需转载还请通知⚠️ 📝个人主页:三雷科技🧸—CSDN博客 🎁欢…

Leetcode刷题详解——字母大小写全排列

1. 题目链接&#xff1a;784. 字母大小写全排列 2. 题目描述&#xff1a; 给定一个字符串 s &#xff0c;通过将字符串 s 中的每个字母转变大小写&#xff0c;我们可以获得一个新的字符串。 返回 所有可能得到的字符串集合 。以 任意顺序 返回输出。 示例 1&#xff1a; 输入&…

渲染管线详解

光栅化的渲染管线一般分为三大阶段&#xff1a;应用程序阶段->几何阶段->光栅化阶段 也可以四大阶段&#xff1a; 应用程序阶段->几何阶段->光栅化阶段->逐片元操作阶段 更详细的流程如下&#xff1a; Vertex Specification&#xff08;顶点规范化&#xff09…

刚接触银行新业务测试的一些问题

在银行金融领域的测试工作&#xff0c;相信很多测试工程师都会遇到自己不熟悉的业务。然后开始看文档&#xff0c;问开发或者需求人员。搞懂了大概的流程&#xff0c;然后开始进行测试。 不过遇到复杂的业务情况时&#xff0c;真的很需要时间去梳理。而且测试环境的配置问题、不…

【自然语言处理】基于python的问答系统实现

一&#xff0c;文件准备 该问答系统是基于已知的问题和其一一对应的答案进行实现的。首先需要准备两个文本文件&#xff0c;分别命名为“question.txt”和“answer.txt”&#xff0c;分别是问题文件和答案文件&#xff0c;每一行是一个问题以及对应的答案。 问题文件: 中国的首…

在群晖NAS上使用AudioStation实现本地音频公网共享

文章目录 1. 本教程使用环境&#xff1a;2. 制作音频分享链接3. 制作永久固定音频分享链接&#xff1a; 之前文章我详细介绍了如何在公网环境下使用pc和移动端访问群晖Audio Station&#xff1a; 公网访问群晖audiostation听歌 - cpolar 极点云 群晖套件不仅能读写本地文件&a…

Spring Boot中配置多个数据源

配置数据源实际上就是配置多个数据库&#xff0c;在一个配置文件中配置多个数据库&#xff0c;这样做主要的好处有以下几点&#xff1a; 数据库隔离&#xff1a;通过配置多个数据源&#xff0c;可以将不同的业务数据存储在不同的数据库中&#xff0c;实现数据的隔离。这样可以…

安全易用的文件同步程序:Syncthing | 开源日报 No.70

syncthing/syncthing Stars: 55.0k License: MPL-2.0 Syncthing 是一个持续文件同步程序&#xff0c;它在两台或多台计算机之间同步文件。该项目的主要功能和核心优势包括&#xff1a; 安全防止数据丢失抵御攻击易于使用自动化操作&#xff0c;仅在必要时需要用户交互适合在各…

Pytest系列(16)- 分布式测试插件之pytest-xdist的详细使用

前言 平常我们功能测试用例非常多时&#xff0c;比如有1千条用例&#xff0c;假设每个用例执行需要1分钟&#xff0c;如果单个测试人员执行需要1000分钟才能跑完当项目非常紧急时&#xff0c;会需要协调多个测试资源来把任务分成两部分&#xff0c;于是执行时间缩短一半&#…

船舶数据采集与数据模块解决方案

标准化信息处理单元原理样机初步方案&#xff1a; 1&#xff09;系统组成 标准化信息处理单元原理样机包含硬件部分和软件部分。 硬件部分包括集成电路板、电源模块、主控模块、采集模块、信息处理模块、通讯模块、I/O模块等。 软件部分包括协议统一标准化模块、设备互联互…

R语言将向量横向转换为单行数据框,随后整合数量不确定的数据框

vector1 c(1, “karthik”, “IT”) names(vector1) c(“id”, “name”, “branch”) df data.frame(as.list(vector1)) print(df) 先给向量的元素命名&#xff0c;然后转换为列表&#xff0c;最后转换为数据框。 我的需求大概是这个样子&#xff1a;数量不确定的仅有单行…

猫罐头怎么选?千万别错过这5款好吃放心的猫罐头推荐!

猫罐头不仅美味可口&#xff0c;而且营养丰富&#xff0c;是专为猫咪打造的美食。那么&#xff0c;猫罐头怎么选&#xff1f;作为一位经营宠物店7年的店长&#xff0c;我对猫猫的饮食都非常重视&#xff0c;也见证了很多猫咪品尝各种猫罐头的瞬间&#xff0c;现在我对各个品牌的…

信创加速,美创科技加入UOS主动安全防护计划(UAPP)

近日&#xff0c;统信UOS主动安全防护计划 (UAPP) 技术沙龙暨新老会员交流活动在北京召开。 美创科技作为信创产业的重要参与者受邀参加。在2023年度UAPP合作伙伴授牌发布仪式上&#xff0c;美创科技获得统信软件授牌&#xff0c;正式成为UAPP成员单位&#xff0c;将与统信软件…

共话医疗数据安全,美创科技@2023南湖HIT论坛,11月11日见

11月11日浙江嘉兴 2023南湖HIT论坛 如约而来 深入数据驱动运营管理、运营数据中心建设、数据治理和数据安全、数据资产“入表”等热点、前沿话题 医疗数据安全、数字化转型深耕者—— 美创科技再次深入参与 全新发布&#xff1a;医疗数据安全白皮书 深度探讨&#xff1a;数字…

详细创建Prism架构wpf项目

方案一&#xff1a; 1.创建一个普通wpf项目 2、安装NuGet包&#xff1a;Prism.DryIoc 3、App.xaml.cs中: 将原本的父类Application改为&#xff1a;PrismApplication&#xff0c;并且实现抽象类 CreateShell方法中写上&#xff1a;”return Container.Resolve<MainWindow>…

分享4个MSVCP100.dll丢失的解决方法

msvcp100.dll是一个重要的动态链接库文件&#xff0c;它是Microsoft Visual C 2010 Redistributable Package的一部分。这个文件的作用是提供在运行C程序时所需的函数和功能。如果计算机系统中msvcp100.dll丢失或者损坏&#xff0c;就会导致软件程序无法启动运行&#xff0c;会…

【STM32】HAL库UART含校验位的串口通信配置BUG避坑

【STM32】HAL库UART含校验位的串口通信配置BUG避坑 文章目录 UART协议校验位HAL库配置含校验位的串口配置BUG避坑附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总线函…

2023年萤石C6C系列监控如何设置群晖Surveillance网络摄像机套件教程

2023年萤石C6C系列监控如何设置群晖Surveillance网络摄像机套件教程 前置工作莹石云视频App设置群晖Nas设置温馨提醒 前置工作 按照说明书安装好莹石监控摄像机&#xff0c;确保机器正常运作&#xff1b;设置好莹石云视频App&#xff0c;确保能够正常查看监控视频。在群晖Nas的…
最新文章