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

Posted

技术标签:

【中文标题】哪个 Tomcat 5 上下文文件优先?【英文标题】:Which Tomcat 5 context file takes precedence? 【发布时间】:2010-09-24 05:58:54 【问题描述】:

Tomcat documentation 说:

上下文描述符的位置是;

$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

优先顺序是什么?

【问题讨论】:

【参考方案1】:

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

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

我基于Tomcat 5.5 official documentation for the Context Container 进行此(以及以下讨论)。

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

雄猫 5.5。将在其他几个地方查找您列出的以外的 <Context> 元素(请参阅官方文档)。

如果 Tomcat 找到 Catalina/localhost/myapp.xml,则永远不会打开 META-INF/context.xml。因此,如果您实际上拥有上述所有文件,更正确的说法是 META-INF/context.xml不相关,而不是它是最低优先级。

如果您在Catalina/localhost/myapp.xml 中输入<Context override="true" ...>,则无论conf/context.xml 是什么,都会使其成为最高 优先级。在您的 META-INF\context.xml 中也是一样的,只要您没有 Catalina/localhost/myapp.xml(参见上一段)。

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

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

【讨论】:

哇,一个非常详细和令人印象深刻的答案。谢谢。【参考方案2】:

我的理解是:

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

【讨论】:

【参考方案3】:

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

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

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

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

【讨论】:

以上是关于哪个 Tomcat 5 上下文文件优先?的主要内容,如果未能解决你的问题,请参考以下文章

Tomcat的上下文文件

如何部署具有不同上下文路径的 grails 应用程序

如何在Tomcat中读取我的webapp上下文之外的属性文件[重复]

在tomcat中设置上下文变量

springboot

在 Tomcat 中的上下文之间共享会话数据