9

war1.war と war2.war の 2 つの WAR を含む EAR ファイルがあります。私の 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//にあります。2 つのスラッシュに注意してください。

私は何を間違っていますか?

EAR に含まれている場合、WAR の sun-web.xml ファイルは無視されることに注意してください。

4

7 に答える 7

6

Glassfish 3.0.1 では、管理コンソールでデフォルトの Web アプリケーションを定義できます: "Configuration\Virtual Servers\server\Default Web Module"。ドロップダウン ボックスには、展開されたすべての war モジュールが含まれます。

デフォルトの Web モジュールは、http://localhost:8080/からアクセスできます。

于 2010-08-31T11:20:41.150 に答える
2

これは、glassfish アプリケーション サーバーのバグのように思えます。application.xml ファイルが既に定義されているため、機能するはずです。

たぶん、次のことを試すことができます:

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

これはバグ/機能のようです。

特定の Web アプリケーションをルート アプリケーションとして使用するように Glassfish を設定できます。他のコンテキストが一致しない場合でも、アプリケーションはルートではなく元のコンテキストで実行されていると認識します。

私の解決策は、最初の WAR を /w で実行し、Apache を使用して RedirectMatch を使用して /whatever を /w/whatever にリダイレクトすることです。あまりきれいではありませんが、問題は解決します(ちょっと)。

RewriteEngine On
RedirectMatch ^/(w[^/].*) /w/$1
RedirectMatch ^/([^w].*) /w/$1
于 2008-09-24T15:19:03.777 に答える
1

ジリキありがとう。パーフェクトな答え!Galssfish 2.1.1 でも動作します!

構成 > HTTP サービス > 仮想サーバー > サーバー

またはdefault-web-moduleパラメーターを変更しますdomain.xml

于 2010-10-22T08:05:48.590 に答える
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

Web モジュールを配置する場所:

<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;

ただし、このオプションはテストしていません

于 2013-04-08T11:09:37.353 に答える
0

新しいバージョンの Glassfish でもう一度試してみましたか? (3.0.1 が出たばかりです)。

Glassfish 3.0.1 を使用して、展開された EAR で単一の WAR を取得し、http://localhost/にデプロイすることができました。あなたが言及したように、sun-web.xmlは無視されているようです(少なくとも爆発した耳の内側)。

于 2010-06-26T02:57:46.457 に答える
0

http://localhost:8080//と同等の有効な URL である必要があります。http://localhost:8080/

war1 の context-root を空白のままにして実験します (それが許可されているかどうかはわかりませんが)。またはに変更し<context-root>.</context-root>ます。

それ以外の場合は、生成された URI は、sun を使用しているのを見たことがないため、glassfish 側のバグであると言わざるを得ません。

于 2008-09-24T14:33:28.770 に答える