JBoss REST WS 应用程序在部署为 WAR 文件时不起作用,但在扩展到文件夹时起作用

JBoss REST WS application doesn't work when deployed as WAR file but works when expanded to a folder

我正在 JBoss 服务器上部署一个应用程序 (EAP-6.4.0, JBoss Web/7.5.7.Final-redhat-1).

我的行为很奇怪。假设应用程序名为 Engine.war。该应用程序实现了一个 REST Web 服务服务器。

  1. 当我通过复制 WAR 文件到 c:\EAP-6.4.0\standalone\deployments\Engine.war 文件[=49= 来部署应用程序时],已成功部署,但 不起作用

  2. 当我通过解包/extracting/exploding WAR 文件的内容部署到c:\EAP-6.4.0\standalone\deployments\Engine.war 文件夹并创建Engine.war.dodeploy文件,它也被部署,但是确实工作。

通过 不起作用 我的意思是服务器抱怨

JBWEB000065: HTTP Status 404 -
JBWEB000124: The requested resource is not available.
JBoss Web/7.5.7.Final-redhat-1

所以与拼错 URI 的行为相同。

我发现的所有 Web 资源都表明 these two deployment methods are just equivalent alternatives,对于我们的其他应用程序,我们没有观察到任何差异!

你能看出为什么在这种情况下我是否解压 WAR 文件很重要吗?

我们终于找到了解决办法。这很愚蠢,所以我想 post 它以防止其他人浪费时间...

我们发现 命名有所不同。解压缩的 WAR 文件的名称不仅仅是我在问题中所说的 Engine.war (我这样做是因为我相信它会隐藏所有不相关的细节)。实际名字是Engine-0.0.1-SNAPSHOT.war,但是解压的时候懒得写这么长的名字,解压到一个文件夹,名字就叫Engine.war.

默认情况下 - 除非另有明确指定 - 应用程序的根地址与 WAR 文件名相同,因此对于 Engine-0.0.1-SNAPSHOT.war 它是 http://localhost:8080/Engine-0.0.1-SNAPSHOT.

然而,我们用地址 http://localhost:8080/Engine 进行计数并且它起作用了,因为 Eclipse 插件总是从解压文件夹中删除版本后缀,而我们没有意识到这一点。

这里有更详细的描述:http://www.openscope.net/2010/01/25/war-deployment-file-structure/

所以整个 "trick" 就是添加正确的 WEB-INF\jboss-web.xml 文件内容

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web>
<jboss-web>
    <context-root>/Engine</context-root>
</jboss-web>

顺便说一句,正如另一个 post 所说,您不能以与服务器无关的方式进行操作: