我有一个包含两个WAR的EAR文件,war1.war和war2.war。我的application.xml文件如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<application version="5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_5.xsd">
<display-name>MyEAR</display-name>
<module>
<web>
<web-uri>war1.war</web-uri>
<context-root>/</context-root>
</web>
</module>
<module>
<web>
<web-uri>war2.war</web-uri>
<context-root>/war2location</context-root>
</web>
</module>
</application>
这导致war2.war在 http://localhost:8080/war2location 上可用,这是正确的,但是war1.war在 http://localhost:8080// 上 - 注意两条斜线。
我做错了什么?
请注意,当包含在EAR中时,将忽略WAR的sun-web.xml文件。
答案 0 :(得分:6)
在Glassfish 3.0.1中,您可以在管理控制台中定义默认Web应用程序: “Configuration \ Virtual Servers \ server \ Default Web Module”。 下拉框包含所有已部署的war模块。
然后可以从http://localhost:8080/访问默认的Web模块。
答案 1 :(得分:2)
在我看来,这是glassfish应用程序服务器中的一个错误。 它应该工作,因为它已经定义了你的application.xml文件。
也许您可以尝试以下方法:
<context-root>ROOT</context-root>
答案 2 :(得分:2)
这似乎是一个错误/功能。
您可以将Glassfish设置为使用某个Web应用程序作为根应用程序,即。当没有其他上下文匹配时,应用程序仍然认为它在原始上下文而不是根目录上运行。
我的解决方案是在/ w上运行第一个WAR,并使用Apache重定向/以及/ w /使用RedirectMatch。不是很漂亮,但它解决了问题(有点)。
RewriteEngine On
RedirectMatch ^/(w[^/].*) /w/$1
RedirectMatch ^/([^w].*) /w/$1
答案 3 :(得分:1)
谢谢jiriki。完美的答案! 也适用于Galssfish 2.1.1!
结构&gt; HTTP服务&gt;虚拟服务器&gt;服务器
或更改default-web-module
domain.xml
参数
答案 4 :(得分:1)
与@jiriki和@SteveGreenslade描述的解决方案相同,但是通过asadmin。 发现于:http://www.java.net/node/681176
或者您可以使用CLI更改此默认Web模块。
asadmin get server.http-service.virtual-server.server.default-web-module
应该显示应用程序,然后您可以使用asadmin set命令进行更改。
更新(Glassfish 3.1 +): 使用glassfish 3.1+,您可以实现它而无需设置default-web-module。您需要修改的唯一地方是
<your_ear>.ear/META-INF/application.xml
您应该在哪里放置您的网络模块:
<context-root/>
这就是工作。
基于此处的其他答案,我得到了一个错误的印象,需要更多的东西。查看由混淆引起的相关问题:http://www.java.net/forum/topic/glassfish/glassfish/asadmin-restart-domain-not-working-war-inside-ear-default-web-module
基本上:
<context-root>/</context-root>
基于代码(https://svn.java.net/svn/glassfish~svn/tags/3.1.2/web/web-glue/src/main/java/com/sun/enterprise/web/WebContainer.java):,也应该有效
if (wmContextPath.length() == 0)
displayContextPath = "/";
else
displayContextPath = wmContextPath;
但是我没有测试这个选项
答案 5 :(得分:0)
http://localhost:8080//
仍应是相当于http://localhost:8080/
我试着将war1的context-root留空(虽然我不确定是否允许)。或者将其更改为<context-root>.</context-root>
。
否则我不得不说生成的URI是glassfish的一个错误,因为我从未见过使用sun的。
答案 6 :(得分:0)
您是否在更新版的Glassfish上再试一次? (3.0.1刚出来)。
我已经能够在爆炸的EAR中获得-single- WAR,使用Glassfish 3.0.1部署到http://localhost/。就像你提到的那样,sun-web.xml似乎被忽略了(至少在爆炸的耳朵里面)。