这篇文档介绍了Tomcat的class loader hierarchy和加载类时目录的搜索次序。 Tomcat的各个web app会共用一些class loader,也有属于各自的class loader(为了隔离)。
Bootstrap
|
System
|
Common
/ \
Webapp1 Webapp2 ...
当WebappX的class loader加载一个类时,会先在WebappX的目录里找类定义 (这和普通Java程序的class loader parent-delegation model略有不同)。 但是也有例外,比如加载JRE的基础类时还是会先委托父class loader去加载。
Tomcat的类加载行为也是可以配置的(通过<Loader delegate="true"/>
)。
因为每个web app都有自己的class loader,要防止class loader的泄漏。
Tomcat的文档还是比较详尽的,没事可以多看看。