9

我有一个 EAR 文件,其中包含两个 WAR,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//上- 请注意两个斜杠。

我究竟做错了什么?

请注意,WAR 的 sun-web.xml 文件在包含在 EAR 中时会被忽略。

4

7 回答 7

6

在 Glassfish 3.0.1 中,您可以在管理控制台中定义默认 Web 应用程序:“Configuration\Virtual Servers\server\Default Web Module”。下拉框包含所有部署的战争模块。

然后可以从http://localhost:8080/访问默认的 Web 模块。

于 2010-08-31T11:20:41.150 回答
2

在我看来,这似乎是 glassfish 应用程序服务器中的一个错误。它应该可以工作,因为它已经定义了您的 application.xml 文件。

也许您可以尝试以下方法:

<context-root>ROOT</context-root>
于 2008-09-24T14:37:53.000 回答
2

这似乎是一个错误/功能。

您可以将 Glassfish 设置为使用某个 Web 应用程序作为根应用程序,即。当没有其他上下文匹配时,应用程序仍然认为它在原始上下文而不是根上运行。

我的解决方案是在 /w 上运行第一个 WAR,并使用 Apache 使用 RedirectMatch 将 /whatever 重定向到 /w/whatever。不是很漂亮,但它解决了问题(有点)。

RewriteEngine On
RedirectMatch ^/(w[^/].*) /w/$1
RedirectMatch ^/([^w].*) /w/$1
于 2008-09-24T15:19:03.777 回答
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/网络/WebContainer.java):

    if (wmContextPath.length() == 0)
        displayContextPath = "/";
    else
        displayContextPath = wmContextPath;

但是我没有测试这个选项

于 2013-04-08T11:09:37.353 回答
1

谢谢吉里基。完美答案!也适用于 Galssfish 2.1.1!

配置> HTTP 服务> 虚拟服务器> 服务器

或更改default-web-module参数domain.xml

于 2010-10-22T08:05:48.590 回答
0

http://localhost:8080//仍应是等效于的有效 URLhttp://localhost:8080/

我会尝试将 war1 的上下文根留空(尽管我不确定这是否允许)。或将其更改为<context-root>.</context-root>.

否则我不得不说生成的 URI 是 glassfish 的一个错误,因为我从未见过使用 sun 的。

于 2008-09-24T14:33:28.770 回答
0

您是否在更新版本的 Glassfish 上再次尝试过?(3.0.1 刚出来)。

我已经能够使用 Glassfish 3.0.1在爆炸的 EAR 中获得 -single- WAR 以部署到http://localhost/ 。就像您提到的那样, sun-web.xml 似乎被忽略了(至少在爆炸的耳朵内)。

于 2010-06-26T02:57:46.457 回答