1

私の GWT アプリは、 http://localhost:8080/myappから実行すると正常に動作します。

基本的にプロキシの背後で gwt アプリをホストする必要があります。プロキシの背後にある場合、URL はhttp://localhost:8080/foo/bar/00_00_00/myappのようなものに変わります。

プロキシの背後にアクセスしようとすると、Gwt がエラーをスローします。

myAppServlet: エラー: 要求されたモジュール パス /foo/bar/00_00_00/myapp/MyApp/ は、このサーブレット /myapp と同じ Web アプリケーション内にありません。モジュールが正しく構成されていないか、クライアントとサーバーのコードが古くなっている可能性があります。

gwt が Java オブジェクトをシリアライズしてクライアントに送り返そうとすると、rpc 要求の後にエラーが発生するようです。

アプリがプロキシの背後にあることを GWT に通知する方法はありますか?

アップデート:

最初のリクエストはうまくいくようです。しかし、他のすべてのリクエストでは失敗しますか??!! RemoteServiceServlet.loadSerializationPolicy からエラーが発生していることがわかりました。残念ながら、静的であるためオーバーライドできません。

プログラムでサーブレットのコンテキストパスを設定することは可能でしょうか?

4

1 に答える 1

1

これで問題全体が解決するかどうかはわかりませんが、最初に呼び出しを行うとすでに機能しているとのことですが、クライアント側で serviceAsync を作成するときに次のことを試してみてください:

MyServiceAsync service = GWT.create(MyService.class);
ServiceDefTarget serviceDefTarget = (ServiceDefTarget) service;
serviceDefTarget.setServiceEntryPoint(
     "http://localhost:8080/foo/bar/00_00_00/myapp/MyApp/");
   /* ^^ Use your full servlet path here ^^ */

なぜこれを明示的にキャストする必要があるのか​​ 疑問に思っている場合はServiceDefTarget、ServiceDefTarget の Javadoc からの説明を次に示します。

/**
 * An interface implemented by client-side RPC proxy objects. Cast the object
 * returned from {@link com.google.gwt.core.client.GWT#create(Class)} on a
 * {@link RemoteService} to this interface to initialize the target URL for the
 * remote service.
 */

(「 http://localhost:8080 」から html ホスト ページを読み込んでいると仮定します。そうしないと、Same Origin Policy のために失敗します。)

私が想像できるもう 1 つの問題は、プロキシのキャッシュに関連している可能性があります。そのため、最初にキャッシュをオフにしてから、"*.cache.*"ファイル名を持つリソースに対してのみ再度有効にしてみてください (参照:さまざまな種類のリソースの理想的な HTTP キャッシュ制御ヘッダー) .

于 2011-04-05T18:44:58.277 に答える