【问题标题】:JBoss REST WS application doesn't work when deployed as WAR file but works when expanded to a folderJBoss REST WS 应用程序在部署为 WAR 文件时不起作用,但在展开到文件夹时起作用
【发布时间】:2015-08-04 17:31:33
【问题描述】:

我正在 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 文件来部署它时,它也已部署,但确实工作。

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

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 文件很重要吗?

【问题讨论】:

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


    【解决方案1】:

    我们终于找到了解决方案。实在是太蠢了,所以我想把它贴出来防止别人浪费他们的时间......

    我们发现在命名上存在不同。解压后的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

    【讨论】:

      猜你喜欢
      • 2020-03-05
      • 2016-01-20
      • 2019-06-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-14
      • 1970-01-01
      相关资源
      最近更新 更多