我们如何将EAR内部的WAR部署为Glassfish中的根(/)上下文?

时间:2020-03-06 14:39:56  来源:igfitidea点击:

我有一个包含两个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的上下文根留为空白(尽管我不确定是否允许这样做)。或者将其更改为&lt;context-root>。&lt;/ 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参数