我们如何将EAR内部的WAR部署为Glassfish中的根(/)上下文?
我有一个包含两个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文件。
解决方案
" http:// localhost:8080 //"仍应是等效于" http:// localhost:8080 /"的有效URL。
我尝试将war1的上下文根留为空白(尽管我不确定是否允许这样做)。或者将其更改为<context-root>。</ context-root>
。
否则,我不得不说生成的URI是glassfish的错误,因为我从未见过使用sun的URI。
在我看来,这似乎是glassfish应用程序服务器中的错误。
它应该已经工作,因为它已经定义了application.xml文件。
也许我们可以尝试以下方法:
<context-root>ROOT</context-root>
这似乎确实是一个错误/功能。
我们可以将Glassfish设置为使用某个Web应用程序作为根应用程序,即。当没有其他上下文匹配时,应用程序仍然认为它在原始上下文而不是根目录上运行。
我的解决方案是在/ w上运行第一个WAR,并使用Apache使用RedirectMatch将/ whatever重定向到/ w / whatever。不是很漂亮,但是可以解决问题(有点)。
RewriteEngine On RedirectMatch ^/(w[^/].*) /w/ RedirectMatch ^/([^w].*) /w/
我们是否尝试过使用最新版本的Glassfish? (3.0.1刚刚问世)。
我已经能够在分解后的EAR中获得-singleWAR,并使用Glassfish 3.0.1部署到http:// localhost /。就像我们提到的,sun-web.xml似乎被忽略了(至少在爆炸的耳朵里面)。
在Glassfish 3.0.1中,我们可以在管理控制台中定义默认的Web应用程序:
"配置\虚拟服务器\服务器\默认Web模块"。
下拉框包含所有已部署的战争模块。
然后可以从http:// localhost:8080 /访问默认的Web模块。
谢谢你,吉利基。完美的答案!
也可以在Galsfish 2.1.1中使用!
配置> HTTP服务>虚拟服务器>服务器
或者更改domain.xml中的default-web-module参数