19

Tomcat 文档说:

上下文描述符的位置是;

$CATALINA_HOME/conf/[enginename]/[hostname]/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

优先顺序是什么?

4

3 回答 3

34

对于您列出的文件,假设您使用所有默认值,简单的答案是(注意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 官方文档

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

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

如果META-INF/context.xmlTomcat 发现Catalina/localhost/myapp.xml. 因此,如果您实际上拥有上述所有文件,更正确的说法是 the META-INF/context.xmlis无关紧要,而不是它是最低优先级。

如果你<Context override="true" ...>在你的Catalina/localhost/myapp.xml那将使它成为最高优先级,不管conf/context.xml. 相同的东西在你的META-INF\context.xml,只要你没有Catalina/localhost/myapp.xml(见上一段)。

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

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

于 2008-11-26T23:32:42.993 回答
1

我的理解是:

  • 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/ ,我认为这没有任何影响
于 2008-11-26T22:11:54.700 回答
0

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

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

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

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

于 2008-11-26T22:03:01.427 回答