我正在JBoss服务器上部署一个应用程序(EAP-6.4.0,JBoss Web / 7.5.7.Final-redhat-1)。
我的行为非常奇怪。假设该应用程序名为Engine.war
。该应用程序实现了一个REST Web服务服务器。
当我通过复制 WAR
文件到c:\EAP-6.4.0\standalone\deployments\Engine.war
文件部署应用程序时,它已成功部署,但不起作用。
当我通过解压缩 /提取/爆炸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
文件,您能看到任何理由吗?
答案 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