对于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功能,并且不保证可移植?
答案 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没有抱怨他们使用相同的根上下文部分/测试。
并不好,因为它们彼此不同。