1

ストリーミングしていきます。.jsp ファイルがあり、.jsp ファイルの最後に、次のコードを使用して非同期サーブレットを含めます。

<jsp:include page = '/simple' flush = 'true' />

したがって、ページ全体がロードされたときに、非同期応答を処理する無限の非同期要求を開く必要があります。

ここに私のサーブレットコードがあります:

public class SimpleAsyncServlet extends HttpServlet {
    public static AsyncContext ctx;
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        req.setAttribute("org.apache.catalina.ASYNC_SUPPORTED", true);
        ctx = req.startAsync();
        ctx.setTimeout(0);
    }
}

他の Java クラスから、静的な SimpleAsyncServlet.ctx.getResponse.getWriter() を使用して、JavaScript コードを現在のページに印刷しています。問題なく動作していますが、ブラウザはロード中であることを示し続けます。非同期のアイデアによると、ページをロードする必要があり、この非同期リクエストはバックグラウンドで存続する必要があります..それだけですが、ブラウザはページを永遠にロードし続けます(タイムアウトは0です。リクエストを無限に開きたいので)

どこが間違っているのか、このブラウザをロードせずにこの永続的なリクエストを行うにはどうすればよいですか?

PS URL (localhost.../simple) からサーブレットに直接アクセスしようとしましたが、ページに何も表示されません。それは永遠にロードし続けます。

4

1 に答える 1

1

あなたは不可能を達成しようとしています。

ブラウザは、次のいずれかの方法で完全なリクエストを受信したことがわかるまで、ページが読み込まれていることを示します。

  • Content-Lengthヘッダーに記載されているバイト数を受信しました
  • 接続が閉じられます
  • チャンクエンコーディングを使用すると、エンドチャンクを受け取りました

「無限」の応答が必要なため、上記の3つのオプションのいずれも実行されません。

于 2012-05-07T20:22:43.573 に答える