Java 配置 Web 应用程序的上下文根

Java configure context root of web application

我有一个使用 Wicket 6、Spring 3.2 和 WildFly 8.2.0 的 Java 网络应用程序。现在我在 jboss-web.xml 文件中设置我的 Web 应用程序的上下文根,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_5_0.dtd">
<jboss-web>
  <context-root>/myCustomContextRoot</context-root>
</jboss-web>

jboss-web.xml文件编译成war。现在一些客户想要将此上下文根更改为空上下文根。所以我必须根据不同的上下文根重新编译我的应用程序版本。有没有办法从 .war 外部以编程方式从 .properties 文件或任何其他方式设置我的应用程序的上下文根,例如在 WildFly 8.2.0 的 standalone.xml 中?

部署 Web 应用程序时设置运行时名称。假设您的 WAR 被称为 myapp-1.0.0-SNAPSHOT.war。使用 foo.war 的运行时名称,上下文根将为 /foo

使用运行时名称 ROOT.war,上下文根将为 /

可以在通过 Web 控制台或 CLI 部署时设置运行时名称。

感谢 Harald Wellmann 的回答。它回答了问题并为我指出了正确的方向!

有些事情我必须自己找出来,可能会对其他人有所帮助:

  • jboss-cli 中指定运行时名称的确切语法是:

    部署path_to_war_file --runtime-name=wantedName.war

    这导致 web 应用程序的 /wantedName/ 的上下文根。

  • 如果 war 文件在 WEB-INF 中包含一个 jboss-web.xml,而后者又包含一个上下文根标签。

也就是说,如果您想在部署时在 WildFly 中控制您的网络应用程序的上下文根,则不得在 jboss-web.xml 中指定任何上下文根。

如果您想利用运行时名称来控制上下文根,那么 jboss-web.xml 没有上下文根标记也是可以的。

我在 WildFly 9.0.1 和 9.0.2 上进行了测试:

希望对您有所帮助!