我知道 Tomcat 使用类加载器来划分 Web 应用程序,并且 Tomcat 中的 Web 应用程序类加载器会覆盖默认的类加载器行为,因此它会在本地检查类,并且仅在找不到类时才委托(delegate)给父类加载器。
知道这一点后,我确信 Tomcat 将确保 .war 文件中的类仅可供该 Web 应用程序使用,因为它将由该类加载器加载。
我不确定 Tomcat 如何对核心类进行分区(如果有的话)。
我知道Java的核心类是由Bootstrap类加载器加载的。
但是,如果 webapp 类加载器尝试首先加载所需的类本身,这是否意味着 webapp 类加载器将自行加载核心类?
我想知道的是Tomcat的类加载器层次结构是否确保为每个Web应用程序单独加载核心Java类,或者它们在Web应用程序之间共享?
最佳答案
如果您通过核心类文件引用已安装的 JRE,则 Tomcat 会与所有 Web 应用程序共享这些文件。
单独的类加载仅适用于放置在每个 webapp lib 目录中的 jar 文件。
甚至放置在 tomcat lib 目录下的 jar 文件也在所有应用程序之间共享。
关于java - Tomcat 6 中的每个 webapp 是否独立加载核心类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4668116/