Java apache-tomcat-9.0.0.M10:更改META-INF/Context.xml中的上下文路径无效
我有一个标准的Tomcat9安装。我只是在webapps文件夹中放了一个helloworld.war,在META-INF中,我用不同的路径放了context.xml,如下所示:Java apache-tomcat-9.0.0.M10:更改META-INF/Context.xml中的上下文路径无效,java,xml,tomcat,Java,Xml,Tomcat,我有一个标准的Tomcat9安装。我只是在webapps文件夹中放了一个helloworld.war,在META-INF中,我用不同的路径放了context.xml,如下所示: 但情况仍然是这样 我尝试了很多东西,但不可能说服Tomcat使用新的路径。有人能帮忙吗? 谢谢 我发现Tomcat只会忽略context.xml中定义的path属性。他们的文档()中没有明确说明这一点,但我一直在观察我们构建的每个应用程序中的行为 根据Tomcat文档: 中的单个文件(扩展名为“.xml”) $CATA
但情况仍然是这样
我尝试了很多东西,但不可能说服Tomcat使用新的路径。有人能帮忙吗?
谢谢 我发现Tomcat只会忽略context.xml中定义的
path
属性。他们的文档()中没有明确说明这一点,但我一直在观察我们构建的每个应用程序中的行为
根据Tomcat文档:
中的单个文件(扩展名为“.xml”)
$CATALINA_BASE/conf/[enginename]/[hostname]/目录上下文
路径和版本将从文件的基本名称派生
文件名减去.xml扩展名)。此文件将始终使用
优先于web应用程序中打包的任何context.xml文件
META-INF目录
虽然本文讨论了放置在WAR之外的conf文件,但似乎同样适用于META-INF/context.xml
这是文档为您的痛苦提供的建议:
如果要使用上下文路径部署WAR文件或目录
与基本文件名无关,则执行以下操作之一
必须使用选项来防止双重部署:
我个人发现最简单的解决方案是,根据Tomcat的约定,为非根上下文和根上下文(
/
)简单地命名WAR文件,并使用root.WAR
为了节省其他人使用META-INF/context.xml尝试部署到不同路径的时间和精力,对于和其他人来说,这似乎是不可能的(在tomcat 9.x中)
我希望通过配置war的META-INF/context.xml来部署到根上下文,但目前似乎不可能(tomcat 9.x)
使用Host copyXML=“true”,context.xml使用war的基本名称部署(到tomcat的conf/Catalina/
)。由于路径配置规则,因此在确定路径时需要优先考虑。也就是说,路径是根据.xml的基名称命名的,因此war是基名称。作为文档和答案提到的地址,除非在server.xml中使用Contextpath
字段,否则不会考虑该字段
这实际上在文档中,但并不明显,您必须将其拼凑在一起,尤其是路径
属性对于META-INF/context.xml
很容易使用
见:
当主机执行autoDeploy或deployOnStartup操作时,web应用程序的名称和上下文路径将从定义web应用程序的文件名派生。因此,应用程序中嵌入的META-INF/context.xml中可能没有定义上下文路径,并且上下文名称、上下文路径、上下文版本和文件的基本文件名(名称减去任何.war或.xml扩展名)之间存在密切关系
如果要使用与基本文件名无关的上下文路径部署WAR文件或目录,则必须使用以下选项之一来防止双重部署:
禁用autoDeploy和deployOnStartup并在server.xml中定义所有上下文
在主机的appBase之外找到WAR和/或目录,并使用带有docBase属性的context.xml文件来定义它
- 可以明确定义各个上下文元素:
- 在应用程序文件中位于/META-INF/context.xml的单个文件中。或者(根据主机的copyXML属性),可以将其复制到$CATALINA_BASE/conf/[engineame]/[hostname]/,并重命名为应用程序的基本文件名加上“.xml”扩展名