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

时间:2015-05-22 15:50:30

标签: web-services jboss war web-deployment resteasy

我正在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 文件部署应用程序时,它已成功部署,但不起作用

  2. 当我通过解压缩 /提取/爆炸WAR文件的内容到c:\EAP-6.4.0\standalone\deployments\Engine.war 文件夹并将其展开并创建Engine.war.dodeploy文件,它也已部署,但 工作。

  3. 不起作用我的意思是服务器抱怨

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

    所以就像拼错URI一样。

    我找到的所有网络资源都说明了 these two deployment methods are just equivalent alternatives ,对于我们的其他应用程序,我们没有发现任何差异!

    在这种情况下,如果我解压缩WAR文件,您能看到任何理由吗?

1 个答案:

答案 0 :(得分:0)

我们终于找到了解决方案。它非常愚蠢,所以我想张贴它以防止别人浪费时间......

我们发现 命名的区别。正如我在问题中所说的那样,解压缩的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/

所以整个"技巧"是添加内容

的正确WEB-INF\jboss-web.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web>
<jboss-web>
    <context-root>/Engine</context-root>
</jboss-web>

顺便说一下,正如另一篇文章所说,你不能以服务器无关的方式做到这一点:https://stackoverflow.com/a/664089/2886891