【问题标题】:Servlets in separate WARs - partially sharing their context root不同 WAR 中的 Servlet - 部分共享其上下文根
【发布时间】:2016-10-29 04:25:09
【问题描述】:

对于一个 web 服务项目,我需要在我的 web 服务器上安装两个 API 版本的 Java EE web

  • example.com/myservice/v1
  • example.com/myservice/v2

分离不同版本的最安全方法似乎是将它们部署在不同的 WAR 文件中,一个用于v1,一个用于v2

我使用 jboss-web.xml 中的这些条目创建并部署了两个 JBoss 6 Java EE 6 Web Profile 应用程序:

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
  <context-root>/test/v1</context-root>
</jboss-web>

<?xml version="1.0" encoding="UTF-8"?>
<jboss-web>
  <context-root>/test/v2</context-root>
</jboss-web>

两个 war 文件都部署和运行没有错误。 JBoss 并没有抱怨他们使用相同的根上下文部分 /test

这是 servlet 容器(指定)的标准行为,还是只是 JBoss 功能且不保证可移植?

【问题讨论】:

    标签: java servlets jakarta-ee jboss


    【解决方案1】:

    例如,Glassfish 的 Oracle 文档说 A context root must start with a forward slash (/); and end with a string - 在上下文根中没有斜杠限制。

    另一个例子是有 an example of two web applications with nested context roots (paragraph 1) 的 JBoss 文档。

    Tomcat 还支持嵌套上下文路径 - 请参阅 Apache Context Configuration doc 的命名部分。

    规范中也没有要求上下文根中没有斜线。我认为这意味着您可能会认为它可以在您的应用服务器上运行,但它的配置方式可能会有所不同,当然您必须在移动到另一个容器之前测试您的应用程序。

    【讨论】:

      【解决方案2】:

      关于上下文根JBoss 说:

      Web 应用程序的上下文根决定了 Tomcat 的哪些 URL 将委托给您的 Web 应用程序。如果您的应用程序的上下文 root 是 myapp 然后任何对 /myapp 或 /myapp/* 的请求都将被处理 除非存在更具体的上下文根,否则由您的应用程序执行。如果一个 第二个 Web 应用程序被分配了上下文根 myapp/help,一个 /myapp/help/help.jsp 的请求将由第二个网络处理 应用程序,而不是第一个。

      您在 jboss-web.xml 中定义的两个上下文根是 i) /test/v1 和 ii) /test/v2。这两者完全不同,因为它们指定了两个不同的 URL。

      所以你的担心是:

      JBoss 没有抱怨他们使用相同的根上下文部分 /test。

      不适合,因为它们彼此不同。

      【讨论】:

      • 感谢您的回答,它引用了 Larry0ua 接受的答案中的链接。我还不能投票,但稍后会投票。我没想到 JBoss 会抱怨——事实上我很高兴 JBoss 接受了两个部分重叠的上下文根。
      猜你喜欢
      • 2010-09-24
      • 1970-01-01
      • 2017-08-17
      • 2015-12-26
      • 2011-02-05
      • 1970-01-01
      • 2010-09-17
      • 2012-11-19
      • 2017-01-30
      相关资源
      最近更新 更多