Tomcat的context.xml文件,是否存在层次结构?

5
我正在尝试在Tomcat5运行的一个应用程序中使用符号链接。由于得到了另一个StackOverflow问题的帮助,我通过在

/...myapplication/META-INF/context.xml

创建一个context.xml文件来实现这一点。我现在正试图在生产服务器上实施此功能。然而,还有其他应用程序正在运行,并且还有另一个context文件

/...tomcat/conf/context.xml

我认为这些是对所有应用程序设置全局配置。如果我在conf/context.xml文件中允许链接,我的符号链接就可以工作。即使我在META-INF/context.xml中允许了它们,如果我不在conf/context.xml中允许它们,我的应用程序的符号链接也无法工作。

我的问题是,conf/context.xml是否控制所有应用程序?如果我只想让符号链接在一个应用程序中起作用,我需要删除conf/context.xml并为每个应用程序创建新的context文件吗?还是有一种方法可以仅在myapplication中允许符号链接?

2个回答

8

请参见我的答案,了解关于“哪个Tomcat 5上下文文件优先级最高”问题的信息。

关于您具体的allowLinks问题,默认情况下,conf/context.xml中的值优先。如果您在conf/context.xml中未做任何说明,则在conf/context.xml中的默认值为allowLinks="false"

如果您只想为您的myapplication更改它,请尝试在META-INF/context.xml中说<Context allowLinks="true" ...>将无效,因为通常conf/context.xml设置将优先。

但是,如果您在META-INF/context.xml中说<Context allowLinks="true" override="true" ...>,那么在META-INF/context.xml中的所有<Context>设置将具有最高优先级,覆盖conf/context.xml中的任何内容。

最后,我建议使用conf/Catalina/localhost/myapplication.xml文件,而不是myapplication/WEB-INF/context.xml文件。这种技术意味着您可以保持WEB-INF的内容清洁,这是您的Web应用程序的核心 - 我不喜欢冒险在我的Web应用程序的核心部分进行修改。 :-)


0

只是想补充一点。

通常 meta-inf/context.xml 会被复制到 conf/Catalina/localhost/myapplication.xml 中。

重新部署 war 文件时,conf/Catalina/localhost/myapplication.xml 将被删除,并按上述方式复制一个新的文件。

这可能会带来真正的烦恼。我喜欢应用程序特定上下文的想法,但我不明白将其放在 meta-inf 目录中有何帮助。

对于生产、UAT 等,这变得非常麻烦。

因此,对于任何服务器静态但应用程序特定的内容,最好将其放在 conf/context.xml 中。这样做的负面影响是它保存了多个应用程序的上下文,如果更改其中一个,所有应用程序都会受到影响。


1
这是不正确的。直接从文档中可以看到:一旦该文件存在,如果在主机的appBase中放置了一个带有更新的/META-INF/context.xml的新WAR文件,它将不会被替换。 - Lucas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接