Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java tomcat共享库-(配置)文件上下文规则_Java_Tomcat_Tomcat6 - Fatal编程技术网

Java tomcat共享库-(配置)文件上下文规则

Java tomcat共享库-(配置)文件上下文规则,java,tomcat,tomcat6,Java,Tomcat,Tomcat6,在Tomcat6的lib(${catalina.home}/lib/)文件夹中,我有几个共享的JAR文件,比如Hibernate 当我调试web应用程序时,控制台通过Hibernate获得大量输出,除非我将logback.xml放在${catalina.home}/lib/中 以下是问题的要点: 如果我将相同的logback.xml移动到我的web应用的/web-INF/lib/文件夹,它将被忽略,就像没有文件一样-我将获得所有输出。 这显然与上下文有关(我认为是在Java级别),但我找不到关于

在Tomcat6的
lib
${catalina.home}/lib/
)文件夹中,我有几个共享的JAR文件,比如Hibernate

当我调试web应用程序时,控制台通过Hibernate获得大量输出,除非我将
logback.xml
放在
${catalina.home}/lib/

以下是问题的要点:
如果我将相同的
logback.xml
移动到我的web应用的
/web-INF/lib/
文件夹,它将被忽略,就像没有文件一样-我将获得所有输出。

这显然与上下文有关(我认为是在Java级别),但我找不到关于它的信息。
请帮助我更好地理解它的基本原理


谢谢大家!

我打赌它与上下文无关,而是与类路径层次结构相关。Java基础设施提供了一种机制()来构建类路径层次结构,Tomcat(和许多其他servlet容器/应用程序服务器一样)使用这种机制来隔离特定应用程序中使用的不同JAR/类文件夹

根类加载器在层次结构中的可见性较低,嵌套类加载器可以在其作用域中查找类,如果找不到,可以向父类加载器请求。一些应用程序服务器允许配置类加载器,以便首先询问父级,然后在父级找不到的情况下查看自己的作用域。但是,父类装入器永远不能从嵌套类装入器装入类

注意:普通文件也会发生同样的情况,就像您的
logback.xml
一样

因此,在Tomcat的
lib
文件夹中部署了一些hibernate库,这些库由层次结构中的根类装入器处理。当您的
logback.xml
文件位于该文件夹中时,它实际上与Hibernate JAR处于相同的类路径层次结构级别,因此Hibernate(或它使用的日志机制)可以加载该文件,因为它在其作用域内


另一方面,应用程序使用的库(
WEB-INF/lib
)由另一个类装入器处理,该类装入器实际上嵌套在前面提到的类装入器中。当您将
logback.xml
移动到应用程序的库文件夹时,实际上是在将其移动到更大的范围内,但是,由于Hibernate已由父类加载程序加载,因此它无法在其范围内定位文件(请记住,父类加载器不能从其子类加载类或文件,只有子类可以向父类请求这些类或文件)。

我打赌它与上下文无关,而是与类路径层次结构相关。Java基础结构提供了一种机制()来构建类路径层次结构和Tomcat(和许多其他servlet容器/应用程序服务器一样)使用它来隔离特定应用程序中使用的不同jar/类文件夹

根类加载器在层次结构中的可见性较低,嵌套类加载器可以在其作用域内查找类,如果找不到,则可以向父类加载器请求。某些应用程序服务器允许配置类加载器,使其先询问父类,然后在父类找不到时再查看自己的作用域。H但是,父类装入器永远不能从嵌套类装入器装入类

注意:普通文件也会发生同样的情况,就像您的
logback.xml
一样

因此,在Tomcat的
lib
文件夹中部署了一些hibernate库,它由层次结构中的根类加载器处理。当该文件夹中有
logback.xml
文件时,它实际上与hibernate JAR处于相同的类路径层次结构级别,因此hibernate(或它使用的日志机制)无法加载该文件,因为它在其作用域内

另一方面,应用程序使用的库(
WEB-INF/lib
)由另一个类加载器处理,该类加载器实际上嵌套在前面提到的类加载器中。当您将
logback.xml
移动到应用程序的库文件夹时,实际上是将其移动到更大的范围内,但是,由于Hibernate已由父类加载器加载,因此它无法在其范围内定位文件(请记住,父类装入器不能从其子类装入类或文件,只有子类可以向父类请求这些类或文件)