Servlet在单独的WAR中 - 部分共享其上下文根

时间:2016-06-27 08:29:06

标签: java servlets java-ee jboss

对于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功能,并且不保证可移植?

2 个答案:

答案 0 :(得分:1)

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

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

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

也没有要求在规范中的上下文根目录中没有斜杠。我认为这意味着除了任何其他功能之外,您可以认为它适用于您的应用程序服务器,但它的配置方式可能有所不同,当然您必须在移动到另一个容器之前测试您的应用程序。

答案 1 :(得分:0)

关于上下文根JBoss说:

  

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

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

所以你担心:

  

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

并不好,因为它们彼此不同。