Tomcat为什么要重写类加载器?

文章目录

  • 一、双亲委派机制
  • 二、分析
    • 1、Tomcat需要隔离性
    • 2、Tomcat需要热替换
    • 3、打破双亲委派机制
  • 三、Tomcat类加载器
    • 1、拓展类加载器
    • 2、工作原理
  • 四、总结

一、双亲委派机制

首先了解下双亲委派机制,大致过程如下:
在这里插入图片描述
简单来说,就是加载class文件时,委托上级加载器去加载,依次传递到顶层类加载器,加载过,直接返回;没加载过,尝试让下级进行加载,依次传递回去;

保证每个类只会被加载一次,避免重复加载。

二、分析

1、Tomcat需要隔离性

  • 如果使用默认的类加载器,是无法加载两个相同类库不同版本的
  • web容器部署多个应用程序,不同应用可能依赖相同类库不同版本,需要保证每个应用程序类独立、相互隔离
  • 部署在同个web容器中的相同类库的相同版本可以共享,否则,会有重复的类库被加载进JVM
  • web容器也有自己的类库,不能和应用程序的类库混淆,需要相互隔离

2、Tomcat需要热替换

jsp 文件其实也就是class文件,那么如果修改了,但类名还是一样,类加载器会直接取方法区中已经存在的,修改后的jsp是不会重新加载的

3、打破双亲委派机制

  • OSGI是基于Java语言的动态模块化规范,类加载器之间是网状结构,更加灵活,但是也更复杂
  • JNDI服务,使用线程上线文类加载器,父类加载器去使用子类加载器

三、Tomcat类加载器

1、拓展类加载器

在这里插入图片描述
说明如下:

  • CommonClassLoader:tomcat最基本的类加载器,加载路径中的class可以被tomcat和各个webapp访问
  • CatalinaClassLoader:tomcat私有的类加载器,webapp不能访问其加载路径下的class,即对webapp不可见
  • SharedClassLoader:各个webapp共享的类加载器,对tomcat不可见
  • WebappClassLoader:webapp私有的类加载器,只对当前webapp可见
    每一个web应用程序对应一个WebappClassLoader,每一个jsp文件对应一个JspClassLoader,所以这两个类加载器有多个实例

2、工作原理

  • a. CommonClassLoader能加载的类都可以被Catalina ClassLoader和SharedClassLoader使用,从而实现了公有类库的共用
  • b. CatalinaClassLoader和SharedClassLoader自己能加载的类则与对方相互隔离
  • c. WebAppClassLoader可以使用SharedClassLoader加载到的类,但各个WebAppClassLoader实例之间相互隔离,多个WebAppClassLoader是同级关系
  • d. 而JasperLoader的加载范围仅仅是这个JSP文件所编译出来的那一个.Class文件,它出现的目的就是为了被丢弃:当Web容器检测到JSP文件被修改时,会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现JSP文件的HotSwap功能

tomcat目录结构,与上面的类加载器对应

  • /common/*
  • /server/*
  • /shared/*
  • /WEB-INF/*

默认情况下,conf目录下的catalina.properties文件,没有指定server.loader以及shared.loader,所以tomcat没有建立CatalinaClassLoader和SharedClassLoader的实例,这两个都会使用CommonClassLoader来代替。Tomcat6之后,把common、shared、server目录合成了一个lib目录。所以在我们的服务器里看不到common、shared、server目录

四、总结

Tomcat重写类加载器的主要目的是为了实现Web应用程序的隔离和热部署。

  • 隔离性:Tomcat使用自定义的类加载器来加载每个Web应用程序的类。这样可以确保每个Web应用程序在运行时具有自己的类加载器实例,从而实现了应用程序之间的隔离。这样一来,不同的Web应用程序可以使用相同的类名,但它们的类加载器会将它们加载到各自的命名空间中,避免了类冲突的问题。

  • 热部署:Tomcat的类加载器还支持热部署功能,即在应用程序运行时动态加载和卸载类。当Web应用程序的代码或资源发生变化时,Tomcat可以重新加载这些变化的部分,而无需重启整个服务器。这样可以提高开发和调试的效率。

通过重写类加载器,Tomcat能够实现更灵活的类加载和隔离机制,使得Web应用程序的部署和维护更加方便和高效。

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

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

相关文章

【中小型企业网络实战案例 一】规划、需求和基本配置

热门IT技术【视频教程】https://xmws-it.blog.csdn.net/article/details/134398330?spm1001.2014.3001.5502 案例拓扑图 案例需求 在中小园区中,S5735通常部署在网络的接入层,S8700通常部署在网络的核心,出口路由器一般选用AR系列路由器。 …

三、e2studio VS STM32CubeIDE之瑞萨RA FSP5.0.0裸机printf重定向

一、概述/目的 二、fsp4.6.0之前printf重定向方法 三、fsp5.0.0之后printf重定向方法 3.1 升级后编译报错 3.2 分析原因 3.2.1 newlib和gcc版本 3.2.2 参考stm32cube ide 3.3 处理办法 3.3.1 方法一 3.3.2 方法二 三、e2studio VS…

❀My虚拟机上的ftp服务器搭建(centos)❀

❀My虚拟机上的ftp服务器搭建(centos)❀ 在CentOS上搭建FTP服务器可以使用vsftpd软件,下面是详细的搭建教程: ①安装vsftpd软件 在终端中输入以下命令进行安装: sudo yum install vsftpd ②配置vsftpd 打开vsftpd的配置文件,…

python医学科研中能做什么,python对医学专业的作用

大家好,小编为大家解答python在医学研究中的运用的问题。很多人还不知道python医学科研中能做什么,现在让我们一起来看看吧! 原标题:这个工具,可全网爬取科研圈中外文献! 作为「科研汪」,你是不…

基于YOLOv8的结核病预测系统设计与实现

一、项目背景 本系统的目的是通过痰液图像来检测出结核杆菌的携带者,及时采取治疗措施,在病情早期对其进行相关治疗减少结核病的传播。程序使用的样本是经过染色处理可以使得结核杆菌在显微镜拍摄的医学图像,通过检测医学图像中的结核杆菌诊…

python+torch线性回归模型机器学习

程序示例精选 pythontorch线性回归模型机器学习 如需安装运行环境或远程调试,见文章底部个人QQ名片,由专业技术人员远程协助! 前言 这篇博客针对《pythontorch线性回归模型机器学习》编写代码,代码整洁,规则&#xf…

教师教育研究的意义有哪些

教师教育研究对于提高教育质量、推动教育改革的重要性。也有许多网友对教师教育研究的意义进行了深入探讨。 一、提高教师专业素养 教师是教育的核心力量,教师的专业素养直接影响到教育质量。教师教育研究通过对教育理论、教学方法、教育技术等方面的研究&#xff…

Nginx 实战闲谈第一讲:HTTP协议介绍

基本介绍 1.HTTP含义 HTTP 全称:Hyper Text Transfer Protocol 中文名:超文本传输协议 HTTP就是将用户的请求发送到服务器,将服务器请求到的内容传输回给浏览器,浏览器进行解析,解析后变成便于观看的页面。&#x…

数字逻辑触发器学习

1 触发器 1.1 概念 能够存储1位二值信号的基本单元电路, 是时序逻辑电路的基本单元。 1.2 电路构成 由门电路和反馈线构成。 1.3 特点 (1)有两个稳定的状态:1和0。 (2)在触发信号的作用下,根据…

程序员必知!开放封闭原则的实战应用与案例分析

开放封闭原则是面向对象设计中的重要原则之一,它要求软件实体(类、模块、函数等)应该对扩展开放,但对修改关闭。这意味着当需要添加新功能时,不应该修改现有的代码,而是应该通过扩展来实现。这可以通过使用…

【openwrt学习笔记】IPV6 ND协议学习和socket编程

目录 一、参考链接二、学习目标三、代码解析3.1 仅解析NA报文保存设备mac和ipv6地址信息3.1.1 open_ns_socket3.1.2 recv_ns_pack 3.2 解析NA和NS报文中DAD报文保存设备mac和ipv6地址信息3.2.1 open_ns_na_socket3.2.2 recv_ns_na_pack 四、代码优化4.1 BPF参考学习资料4.2 代码…

VCP-DCV VMware vSphere,12月23日即将开课~想了解点击查看

VCP-DCV VMware vSphere 本周开课~ 想报名的必须提前预约啦 👇👇👇 课程介绍 本课程重点讲授如何安装、配置和管理VMware vSphere 8.0(包括VMware ESXi™ 8.0和VMware vCenter Server™ 8.0) 本课程将帮助您做好为任…