Java apache-tomcat-9.0.0.M10:更改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

我有一个标准的Tomcat9安装。我只是在webapps文件夹中放了一个helloworld.war,在META-INF中,我用不同的路径放了context.xml,如下所示:

但情况仍然是这样

我尝试了很多东西,但不可能说服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文件或目录 与基本文件名无关,则执行以下操作之一 必须使用选项来防止双重部署:

  • 禁用autoDeploy和deployOnStartup并在server.xml中定义所有上下文
  • 在主机的appBase之外找到WAR和/或目录,并使用带有docBase属性的context.xml文件来定义它 然而,他们继续劝阻选择1


    我个人发现最简单的解决方案是,根据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中使用Context
    path
    字段,否则不会考虑该字段

    这实际上在文档中,但并不明显,您必须将其拼凑在一起,尤其是
    路径
    属性对于
    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”扩展名

    只有在server.xml中静态定义上下文时,才能使用此属性。在所有其他情况下,将根据.xml上下文文件或docBase使用的文件名推断路径

    在我看来,经过大量的研究之后,META-INF/context.xml的唯一用途是在部署时定义应用程序的其他配置项——例如——尽管我想知道其他人的想法

    有关如何部署到不同的上下文路径和根上下文(不使用META-INF/context.xml-此处无自动部署(!)的信息,请参阅和其他人(下文):


    您使用哪个IDE创建war文件?Netbeans IDE 8.1。但我认为这是独立于IDE的。这更像是我需要如何指导Tomcat做什么,对吗?当然它是独立的。同样的问题也发生在我身上。您可以在创建war文件后更改war文件名,或者在创建新war文件时不想更改war文件名。在“属性”部分中,查找“生成”下的打包。您可以设置war文件名。是的,正确。因此,改变战争不是问题,当然是可能的。但根据apache文档,这应该是可能的,而且听起来很容易做到。我已经在互联网上爬网了,但是找不到足够的解决方案。非常感谢Pavel的帮助。我不明白为什么tomcat的家伙把这个问题弄得太复杂了:S