tomcat类加载机制

tomcat为什么要打破双亲委派?

tomcat作为一个服务器需要完成几个功能:

  • 部署在服务器中的应用程序的类库互相隔离开,因为有可能两个应用程序用了同一个类库的不同版本。
  • 相同的类库一个服务器中存在一个。
  • web容器本身也有类库,不能与应用程序的混淆。
  • 需要热加载jsp文件,所以对于jsp需要有自定义类加载器。

jvm默认类加载器无法满足这些要求,因为默认类加载器无法加载同一个类库的不同版本。jsp由于每次修改后都要加载,所以每个jsp应该都有唯一的一个类加载器,所以也不满足默认类加载器要求

tomcat父类加载器想让子类加载器完成类加载改怎么办?

使用线程上下文加载器

tomcat类加载

bootstrap引导类加载器 加载jvm运行基本的类,以及标准扩展类

system 系统类加载器 加载catalina.bat中指定位置的类

common 通用类加载器 位于catalina_home/lib下

webapp 应用类加载器 每个应用部署后,都会创建唯一的一个类加载器

当应用需要加载某个类的时候,会以如下顺序进行类加载

1、使用bootstrap引导类加载器加载

2、使用system系统类加载器加载

3、使用应用类加载器在web-inf/classes中加载

4、使用应用类加载器在web/lib中加载

5、使用common类加载器在catalina_home/lib中加载

Tomcat 类加载
tomcat类加载

在 CATALINA_HOME/lib 以及 WEB-INF/lib 中放置了 不同版本的jar包,此时就会导致某些情况下报加载不到类的错误。还有如果多个应用使用同一jar包文件,当放置了多份,就可能导致 多个应用间 出现类加载不到的错误。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值