哪个Tomcat 5上下文文件优先?

Tomcat文档说:

上下文描述符的位置是;

$ CATALINA_HOME / conf目录/ [引擎] / [主机名] /context.xml
$ CATALINA_HOME / webapps /目录[webappname] /META-INF/context.xml

在我的服务器上,我至少有3个文件浮动:

1 ...tomcat/conf/context.xml 2 ...tomcat/Catalina/localhost/myapp.xml 3 ...tomcat/webapps/myapp/META-INF/context.xml 

优先顺序是什么?

对于您列出的文件,假设您使用所有默认值的简单答案,顺序是(注意conf / Catalina / localhost):

 ...tomcat/conf/context.xml ...tomcat/conf/Catalina/localhost/myapp.xml ...tomcat/webapps/myapp/META-INF/context.xml 

我将这个(以及下面的讨论)基于Context Container的Tomcat 5.5官方文档 。

那么,如果这是简单的答案,那么完整的答案是什么呢?

Tomcat 5.5。 除了你列出的元素外,还会查看其他几个地方(参见官方文档)。

如果Tomcat找到Catalina/localhost/myapp.xml则永远不会打开META-INF/context.xml 。 因此,如果你真的拥有上面的所有文件,那么更正确的说META-INF/context.xml无关紧要的 ,而不是它是最低优先级。

如果你在Catalina/localhost/myapp.xml中说将使它成为最高优先级,而不管conf/context.xml 。 只要您没有Catalina/localhost/myapp.xml (参见上一段),您的META-INF\context.xml中也是Catalina/localhost/myapp.xml

此外,上述文件中路径的/Catalina/localhost/部分实际上来自“默认” conf/server.xml并匹配 。 如果您的server.xml使用namedefaultHost不同值,那么这就是Tomcat看起来的目录结构。

最后,对于您列出的文件的...tomcat\部分,Tomcat使用$CATALINA_BASE环境变量中的dir。 如果未设置,则使用$CATALINA_HOME环境变量中的dir,该变量是Tomcat安装的目录。 我喜欢设置和使用$CATALINA_BASE这样我就不会“污染”我的Tomcat安装。

我的理解是:

  • tomcat / conf / context.xml是“默认”context.xml,其内容与webapp上下文定义重叠。 我的TC 5默认context.xml几乎没有任何内容,除了将web.xml列为监视资源,它支持这一概念。
  • tomcat / Catalina // .xml用于webapp。 要么是手动放置,要么是在部署时从您的webapp 取出……所以这是TC使用的真正主人。 如果您编辑此更改将在下次启动时读取。
  • tomcat / webapps / myapp / META-INF / context.xml – 如果你在初始部署后改变它,这会在初始部署时复制到tomcat / Catalina /,我认为没有任何影响

我没有找到任何官方文档,但我观察到加载顺序为:

 1 tomcat_home/conf/context.xml 2 tomcat_home/webapps/myapp/META-INF/context.xml 

其中#2是最后一个应用的(因此其设置会覆盖所有先前的设置,如果适用)。

我从未使用过webapp命名的上下文文件(您的选项#2)。