JVM(8)Tomcat类加载器架构

主流web服务器需要解决以下几个问题:
1、可隔离:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互隔离。
2、可共享:部署在同一个服务器上的两个web应用程序所使用的java类库可以实现相互共享。
3、服务器安全:服务器本身也有依赖的类库,要保证服务器自身的安全不受部署的web应用程序影响。
4、支持jsp热替换:jsp由于其纯文本存储的特性,运行时修改的概率远大于其他class文件,因此主流的web服务器支持jsp生成类的热替换。

tomcat提供了好几个classpath供用户存放第三方类库,不同目录用不同类加载器去加载里面的java类库,在tomcat目录结构中,有/common,/server,/shared可以存放java类库,再加上web应用服务自身的目录/WEB-INF,一共4组。
在timcat6以后,默认没有/server,/shared,而是把这三个合并为一个目录/lib,相当于/common的作用。
可通过参数打开。
/common:可被tomcat和所有的web应用程序共同使用。
/server:只能被tomcat使用。
/shared:可被所有web应用程序使用,但对tomcat不可见。
/WEB-INF:只可被web应用程序使用,对tomcat和其他web服务不可见。
这里写图片描述

父类加载器加载的类可以被子类加载器使用,因此,从图上可以看出,common加载的类可以被server和shared使用,而server和shared是隔离的。
每个web应用对应一个webApp类加载器,每个jsp文件对应一个jsp类加载器。他们之间是相互隔离的。

猜你喜欢

转载自blog.csdn.net/wee616/article/details/78357472