Tomcat类加载模型

Tomcat打破了双亲委派模型,它定义了五类ClassLoader,分别是:


commonLoader:Tomcat最基本的类加载器,加载路径中的class可以被Tomcat容器本身以及各个Webapp访问;

catalinaLoader:Tomcat容器私有的类加载器,加载路径中的class对于Webapp不可见;

sharedLoader:各个Webapp共享的类加载器,加载路径中的class对于所有Webapp可见,但是对于Tomcat容器不可见;

WebappClassLoader:各个Webapp私有的类加载器,加载路径中的class只对当前Webapp可见;

JasperLoader:JasperLoader的加载范围仅仅是这个JSP文件所编译出来的那一个.Class文件,它出现的目的就是为了被丢弃:当Web容器检测到JSP文件被修改时,会替换掉目前的JasperLoader的实例,并通过再建立一个新的Jsp类加载器来实现JSP文件的HotSwap功能。


Tomcat为什么要打破双亲委派模型:

1)每个webapp应用都需要加载同一个第三方jar包的不同版本,如果交给父类加载器加载,那就只能加载同一个版本的jar了,所以无法遵循双亲委派;

2)每个JSP生成的类需要热插拔。

tomcat为了实现隔离性,没有遵守这个约定,每个webappClassLoader加载自己的目录下的class文件,不会传递给父类加载器。且每个JasperLoader加载自己的class文件,也不会传递给父类加载器。

你可能感兴趣的:(Tomcat类加载模型)