这篇文档介绍了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的文档还是比较详尽的,没事可以多看看。