Tomcat类加载器架构

1、主流的javaweb服务器,都实现了自己定义的类加载器(tomcat自定义多个类加载器);

2、web服务器功能健全,需要解决一下几个问题:

(1)同一服务器的两个web应用程序,可以实现类库隔离(俩web应用可能使用统一类库不同版本);

(2)同一服务器的两个web应用程序,可以实现类库共享(内存方法区很容易过度膨胀);

(3)服务器自身安全不受部署web应用影响(二者应当类库隔离);

(4)支持热替换服务器(修改jsp不需要重启,而jsp实质上是java class文件);

3、各种web服务器都提供好几种classpath路径存放第三方类库;

(1)不同路径具备不同访问对象和作用范围;

(2)每个路径都有一个对应的自定义类加载器;

4、tomcat类库结构和类加载器规划:

(1)/common/*:可被tomcat和所有web应用程序共同使用;(CommonClassLoader)

(2)/shared/*:对所有web应用程序所使用,tomcat不可见;(SharedClassLoader)

(3)/server/*:可被tomcat使用,别的程序不可见;(CatalinaClassLoader)

(4)/webapp/WEB-INF/*:自身web应用使用,其他应用、tomcat不可见(WebappClassLoader);

(5)每个web应用对应一个类加载器,每个jsp文件对应一个类加载器;

5、依据双亲委派原则,子加载器可以使用父加载器加载的类库:

6、父加载器可以使用子加载器加载的类库:

(1)线程上下文类加载器(Thread Context ClassLoader);

(2)setContextClassLoader()实现 父类加载器 请求  子类加载器完成类加载动作;

猜你喜欢

转载自my.oschina.net/u/3847203/blog/1810132