美文网首页
Tomcat是如何打破双亲委派模型的

Tomcat是如何打破双亲委派模型的

作者: 倚仗听江 | 来源:发表于2020-12-21 10:57 被阅读0次

一、Tomcat为什么不能使用默认的类加载机制

  1. 一个web容器可能需要部署两个应用程序,不同的应用程序可能会依赖同一个第三方类库的不同版本,不能要求同一个类库在同一个服务器只有一份,因此要保证每个应用程序的类库都是独立的,保证相互隔离。
  2. 部署在同一个web容器中相同的类库相同的版本可以共享。
  3. web容器也有自己依赖的类库,不能于应用程序的类库混淆。基于安全考虑,应该让容器的类库和程序的类库隔离开来。
  4. web容器要支持jsp的热部署。

二、Tomcat类加载机制


Tomcat类加载机制.png
  • CommonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;
  • CommonClassLoader容器私有的类加载器,加载路径中的class对于Webapp不可见;
  • SharedClassLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;
  • WebappClassLoader:各个Webapp私有的类加载器,加载路径中的class只对当前Webapp可见;
  1. CommonClassLoader能加载的类都可以被Catalina ClassLoader和SharedClassLoader使用,从而实现了公有类库的共用。
  2. CatalinaClassLoader和Shared ClassLoader自己能加载的类则与对方相互隔离。
  3. WebAppClassLoader可以使用SharedClassLoader加载到的类,但各个WebAppClassLoader实例之间相互隔离。
  4. JasperLoader的加载范围仅仅是这个JSP文件所编译出来的那一个.Class文件,它出现的目的就是为了被丢弃:当Web容器检测到JSP文件被修改时,会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现JSP文件的HotSwap功能。 (JSP热部署原理)

Tomcat 为了实现隔离性,没有遵守双亲委派模型,每个WebAppClassLoader加载自己的目录下的class文件,不会传递给父类加载器。

相关文章

  • Tomcat是如何打破双亲委派模型的

    一、Tomcat为什么不能使用默认的类加载机制 一个web容器可能需要部署两个应用程序,不同的应用程序可能会依赖同...

  • 深入理解Tomcat(五)类加载机制

    前言 我们知道,Java默认的类加载机制是通过双亲委派模型来实现的。而Tomcat实现的方式又和双亲委派模型有所区...

  • Java 类加载

    双亲委派模型 并非强制 而是推荐 SPI 父类加载器需要子类加载器加载类 打破双亲委派模型 https://www...

  • Tomcat是如何打破双亲委派机制的

    类加载机制是什么 概论.java文件通过编译以后,读取到jvm的方法区中,然后类加载器的加载、验证(class特定...

  • 2018-07面试题目

    1. JVM的类加载机制 主要是双亲委派模型的东西。它是什么、怎么工作的、为什么要有它,以及打破双亲委派模型的...

  • Tomcat类载入器

    大家都知道,Java的类加载机制是双亲委派模型,那么什么是双亲委派模型呢?我们这里简要的说一下,双亲委派模型...

  • 类加载器与双亲委派机制

    前言 什么是类加载器?类加载器有哪些?双亲委派机制是怎么样的?什么时候需要打破双亲委派?如何打破? 以上内容网上有...

  • 常见JVM问题

    谈论一下你所了解的类加载器,什么是双亲委派,如何打破? 思路: 类加载器介绍 → 目的/意义 → 何为双亲委派 →...

  • sandBox源码分析之ClassLoader

    提起classLoader,就不由自主想起了java classLoader的双亲委派模型,那么到底什么是双亲委派...

  • java类加载破坏双亲委派模型

    前面java类加载器与双亲委派模型中提到Java采用个双亲委派的方式来完成类加载,但是双亲委派模型并不是一个强制的...

网友评论

      本文标题:Tomcat是如何打破双亲委派模型的

      本文链接:https://www.haomeiwen.com/subject/yhqrnktx.html