Tomcat7.0.42源码研读之类加载器(五)
2017-11-05 20:14
274 查看
Tomcat作为一款通用型的Web服务器,在类加载器上面应该要满足一下几点特性:
1、资源隔离性:如果一个Tomcat实例下部署了多个Web应用,有的Web应用使用了Spring3,有的Web应用使用了Spring4,如果Tomcat使用一个类加载器加载,那么Tomcat很可能会因为Jar包冲突而无法启动。
2、灵活性:如果一个Tomcat实例下部署了多个Web应用,我们更改其中一个应用的Jar包时,不会影响到其他Web应用
3、性能:如果一个Tomcat实例下部署了多个Web应用,每个应用都有其专门的类加载器,类加载器只需要扫描自己的Jar包,速度更快
基于上面几点,Tomcat的类加载器架构如下:
Tomcat类加载器说明如下表:
我们知道,Java默认的类加载机制是双亲委派模式的,类加载顺序是:
1、交由父类加载器加载,这个是个向上递归的过程
2、如果父类加载器没有,则从当前类加载器加载
3、如果都没有加载到,则抛出异常
但是Tomcat的Web应用类加载器跟Java默认的不太一样,它的加载顺序如下:
1、先从JVM的Bootstrap类加载器进行加载
2、如果没有,再从当前类加载器路径下进行加载(/WEB-INF/classes、/WEB-INF/lib)
3、如果没有,再从父类加载器进行加载,由于父类加载器采用默认的双亲委派模式,加载顺序为System、Common、Shared
Tomcat提供了delegate属性控制是否启用Java默认的双亲委派模式,默认是false(不启用),Tomcat也提供了packageTriggersDeny属性只让某些包路径采用Java的双亲委派模式
1、资源隔离性:如果一个Tomcat实例下部署了多个Web应用,有的Web应用使用了Spring3,有的Web应用使用了Spring4,如果Tomcat使用一个类加载器加载,那么Tomcat很可能会因为Jar包冲突而无法启动。
2、灵活性:如果一个Tomcat实例下部署了多个Web应用,我们更改其中一个应用的Jar包时,不会影响到其他Web应用
3、性能:如果一个Tomcat实例下部署了多个Web应用,每个应用都有其专门的类加载器,类加载器只需要扫描自己的Jar包,速度更快
基于上面几点,Tomcat的类加载器架构如下:
Tomcat类加载器说明如下表:
类加载器 | 说明 |
Common | 以System为父类加载器,Tomcat最顶层的公用类加载器,其路径为common.loader |
Catalina | 以Common为父类加载器,用于加载 Tomcat服务器自身的类加载器,其路径为server.loader |
Shared | 以Common为父类加载器,是所有Web应用的父类加载器,其路径为shared.loader |
Web应用 | 以Shared为父类加载器,加载/WEB-INF/classes/和/WEB-INF/lib下所有的class和Jar包,该类加载器只对当前Web应用可见,对其他的Web应用均不可见 |
1、交由父类加载器加载,这个是个向上递归的过程
2、如果父类加载器没有,则从当前类加载器加载
3、如果都没有加载到,则抛出异常
但是Tomcat的Web应用类加载器跟Java默认的不太一样,它的加载顺序如下:
1、先从JVM的Bootstrap类加载器进行加载
2、如果没有,再从当前类加载器路径下进行加载(/WEB-INF/classes、/WEB-INF/lib)
3、如果没有,再从父类加载器进行加载,由于父类加载器采用默认的双亲委派模式,加载顺序为System、Common、Shared
Tomcat提供了delegate属性控制是否启用Java默认的双亲委派模式,默认是false(不启用),Tomcat也提供了packageTriggersDeny属性只让某些包路径采用Java的双亲委派模式
相关文章推荐
- Tomcat7.0.42源码研读之组件生命周期Lifecycle(一)
- Tomcat7.0.42源码研读之组件说明(四)
- Tomcat7.0.42源码研读之职责链模式Pipeline与Valve(二)
- Tomcat7.0.42源码研读之BIO(七)
- Tomcat7.0.42源码研读之网络连接器Connector(三)
- Tomcat7.0.42源码研读之网络框架Coyote(六)
- Tomcat7.0.42源码研读概览
- Tomcat内核之类加载器工厂
- tomcat源码研读笔记—tomcat的启动之三 StandardEngine的启动
- tomcat源码研读笔记—tomcat的接收请求之一 HttpProcessor接收请求
- Tomcat内核之类加载器工厂
- tomcat源码研读笔记—tomcat的启动之四 StandardHost的启动
- tomcat源码研读笔记—tomcat的接收请求之三 StandardHost接收请求
- tomcat源码研读笔记—tomcat的启动之五 StandardContext的启动
- tomcat源码研读笔记—tomcat的接收请求之四 StandardContext接收请求
- tomcat源码研读笔记—tomcat的启动之六 StandardWrapper的启动
- 细说tomcat之类加载器
- tomcat解析之类加载器
- tomcat源码研读笔记—Catalina类
- tomcat源码研读笔记—tomcat的初始化之一 StandardServer的初始化