0

HTTP Post メソッドを使用する非常に単純なサーブレットを作成しました。動作する単純な HTML フォームを使用して、ローカルの Apache Tomcat サーバーでテストしました。GWT アプリと統合したい。FormPanel を使用して呼び出すことができます。その場合、コンテンツがダウンロードされ、ブラウザ ウィンドウがちらつきます。

RequestBuilder を使用してアクセスする必要があることはわかっています。しかし、オーバーロードされた public void onResponseReceived(Request request, Response response) メソッドの response.getStatusCode() は常にステータスを 0 として返し、 response.getText() は null を返します

    String url = "http://localhost:8080/servlets/servlet/ShapeColor";
    builder = new RequestBuilder(RequestBuilder.POST, URL.encode(url));


    try {
        String json = getJSONString();
        //builder.setTimeoutMillis(10000);
        builder.setHeader("Access-Control-Allow-Origin", "*");


        builder.setHeader("Content-type", "application/x-www-form-urlencoded");
        builder.sendRequest(json, new RequestCallback() {

            @Override
            public void onError(Request request, Throwable exception) {
                 Window.alert("Couldn't retrieve JSON");
            }

            @Override
            public void onResponseReceived(Request request, Response response) {
              if (200 == response.getStatusCode()) {
               System.out.println("res:"+response.getText());
              } else {
                  System.out.println("err: " + response.getStatusCode()+","+response.getText());
              }
            }
          });
        //Request response = builder.send();

    } catch (RequestException e) {
        // TODO Auto-generated catch block

    }

CORSリファレンス( https://code.google.com/p/gwtquery/wiki/Ajax#CORS_%28Cross_Origin_Resource_Sharing%29)に従ってサーブレットを変更するなど、多くのことを試しました

私のtest.htmlを使用してブラウザで常に動作しますが、アプリからは動作しません。ただし、 onResponseReceived メソッドは常に呼び出されます

ありがとう

KKM

4

1 に答える 1

1

アプリでの呼び出しが何らかの方法で同一オリジン ポリシー ( http://en.wikipedia.org/wiki/Same-origin_policy ) に違反しているかどうかを確認しましたか? GWT RequestBuilder は内部で XMLHttpRequest を使用するため、SOP に該当します。

GWT アプリは、サーブレットと同じドメイン (サーバー + ポート) 内で実行されますか? 同じプロトコル (https または http) を使用していますか?

于 2013-11-11T08:48:13.550 に答える