1

この「構成」でGWTを試しています:

1)json出力を生成するサーバーバックエンドをPythonで作成しました(localhot:8094で実行)

2) RequestBuilder を使用して GET を Python サーバーに設定する非常に単純な GWT アプリを作成しました (GWT Eclipse プラグインの開発モードでは、http://127.0.0.1:8888/test.htmlからアクセスできます) 。

コードは単純です

/**
 * Entry point classes define <code>onModuleLoad()</code>.
 */
public class Test implements EntryPoint {
    /**
     * The message displayed to the user when the server cannot be reached or
     * returns an error.
     */

    private static final String SERVER_URL = "http://localhost:8094";
    private static final String SERVER_ERROR = "An error occurred while "
            + "attempting to contact the server. Please check your network "
            + "connection and try again.";

    /**
     * This is the entry point method.
     */
    public void onModuleLoad() {

        RequestBuilder requestBuilder = new RequestBuilder(RequestBuilder.GET, SERVER_URL);
        try {
            requestBuilder.sendRequest(null, new Jazz10RequestCallback());
        } catch (RequestException e) {
            Window.alert("Failed to send the message: " 
                    + e.getMessage());
        }

    }

    class Jazz10RequestCallback implements RequestCallback{

        public void onError(Request request, Throwable exception) {
                // never reach here
        Window.alert("Failed to send the message: "
                    + exception.getMessage());

        }

        public void onResponseReceived(Request request, Response response) {
            // render output
            Window.alert(response.getText());

        }


    }
}

ただし、アラートは常に onResponseReceived から発生し、何も表示されません (空の文字列だと思います)。

Python サーバーに問題なくアクセスでき、ブラウザ経由で json をダウンロードできます。しかし、GWT からサーバーにヒットするリクエストが表示されません。

「inherits name='com.google.gwt.http.HTTP」が gwt.xml ファイルにあることを確認しました

質問は次のとおりです。

1) ここでも同じサイト ポリシー制限が適用されますか? 私は例外(したがって失敗メッセージ)を期待していましたが、それは起こりませんでした

2) 本当に同じサイト ポリシーの問題である場合、Python バックエンドから GWT スクリプトを展開する最も簡単な方法は何ですか? Eclipse gwt プラグインは、war サブディレクトリにアーティファクトを生成します。これらのファイルを Python バックエンドの静的ディレクトリにコピーするだけで十分ですか?

4

3 に答える 3

2

1) はい、ホストは同じですが、別のポートにアクセスしようとしています - SOP はそれを許可しません。おそらく JavaScript の例外が発生している可能性があります。Firebug のコンソールなどを確認してください。

2)公式ドキュメントのガイドに従ってください。Java サーバーは必要ありません。HTTP コンテンツを提供できるサーバーがあれば十分です (たとえば、Apache は問題ありません)。バックエンドとして Python を使用した経験はありませんが、Python と HTTP を提供するためのソリューションがあると確信しています。

-noserver フラグを使用すると、動的コンテンツとすべての静的コンテンツ (GWT アプリケーションのホスト ページ、他の HTML ファイル、画像、CSS など) の両方を提供するために、GWT ホスト モード ブラウザーによって外部サーバーが使用されます。 .)

この場合の動的コンテンツは Python スクリプトになります。

于 2010-03-05T22:40:31.200 に答える
1

これは遅すぎるかもしれません。相対パスなどを使用してローカル リソースにアクセスしていない場合は、SOP (same origin policy) の対象となります。-no-server フラグは、この問題を解決するのにあまり役に立ちません。この問題を回避するには、 http://code.google.com/p/google-web-toolkit-doc-1-5/wiki/FAQ_JSONFeedsFromOtherDomainをお読みください。さらに良い解決策は、gdata API によって利用される com.google.gwt.jsonp.client.JsonpRequestBuilder を使用することです (継承名 = 'com.google.gwt.jsonp.Jsonp' \ を継承することを忘れないでください)。 "自分で書く必要がないという意味で)。お役に立てれば。乾杯〜

于 2010-06-27T12:10:00.527 に答える
1

はい、これは SOP のために失敗します。取得する HTTP 応答コードは何ですか? 通常、この場合、in は 200 (OK) ではなく 0 として返されます。解決策は、この記事の一部として GWT を使用した JSONP について少し書いた JSONP アプローチを使用することかもしれません: http://www.bristol-gtug.org/?p=76

于 2010-03-10T21:33:59.380 に答える