0

AJAXでサーブレット3の非同期応答を利用する方法を考えています。リクエストとレスポンスの同期処理モデルでは、レスポンスが返ってきたら、XmlHttpRequest のコールバックでレスポンス テキストを取得できます。しかし、応答が別のスレッドで処理され、何らかのメッセージが返された場合、XHR は要求が終了したときに何を取得するのでしょうか? まだ応答本文を取得できますか? 簡単なコードをテストしてみましたが、応答が得られなかったようです。

私はこれを理解できます.AJAXリクエストが返されたとき、レスポンスには何もありません.別のサーバースレッドで遅延するため、コールバックは何も取得しません.

しかし、AJAX が正しい応答を得られるようにする方法はあるのでしょうか?

4

1 に答える 1

0

非同期処理が完了した後に asycContext.complete() を呼び出すのを忘れてしまったので、以前に間違いを犯したことを恐れています。complete() が呼び出された後、ajax は応答を取得します。ただし、次のようにタイムアウト設定よりも処理が長く続くと、asynccontext の状態が不正であるという例外が発生し、クライアントは何も取得しません。

    final AsyncContext ac = request.startAsync();


   ac.setTimeout(1000);


    Executors.newSingleThreadExecutor().execute(new Runnable(){

        @Override
        public void run() {
            PrintWriter pw;
            try {
                Thread.sleep(2000);
                pw = ac.getResponse().getWriter();
                pw.write("Hello, World!");
                ac.complete();
            } catch (IOException e) {
                e.printStackTrace();
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

    });

したがって、ここでのキーは次のとおりだと思います。1. 処理が完了したら呼び出しを完了します。2. 適切なタイムアウトを設定します。

于 2013-04-04T02:49:08.870 に答える