Java EEサーブレット/ jspでは、クライアントは1つのhttpリクエストに対して1つのHTTPレスポンスを取得できることがわかっています。私は、httpレスポンスの長さが不明なものを実装したいと思います。クライアントが最初のhttp要求を送信した後、サーバーがクライアントのデータをプッシュし続けるようにします。その場合、AJAXはかなり重いので、AJAXは使用したくありません。Httpレスポンスの長さを知らない
たとえば、Webサーバーからログメッセージを取得できるWebページを作成する場合、ログメッセージが別のモジュールから生成されたときにWebサーバーによってログメッセージが送信される可能性があります(この場合、時間間隔ここでは定期的なタイマーチェックは好ましくないと仮定しています)。ログメッセージはWebブラウザに追加され、Webブラウザはリフレッシュできません。例:
ログ12:00 pm ..... ログ12:03 pm ..... ログ12:04 pm .... 。 。 。
httpリクエストのみを送信し、httpレスポンスを引き続き取得することで、どうすればできますか?
@dystroy
あなたは(新しいログデータがあるとき)、私はdoPostメソッド/ doGetメソッドの終了前のPrintWriter複数の時間をフラッシュすることができることを意味しますか?
構文エラーを無視してください。私はIDEを使用しませんでした。
protected void doPost(HttpServletRequest req, HttpServletResponse resp){
PrintWriter pw = resp.getWriter();
pw.println("<html><body>Testing for the streaming.</body></html>");
pw.flush();
/*
The syntax could not be correct, please focus on logic.
This while loop check the log sent by web server is finised or not and flush the data to the
client, after that the javascript will change the content of the inner Html. Is the logic below
valid?
*/
while(!log.finish()){
pw.println("document.setInnerHtml("+log.newLog()+")");
pw.flush();
}
}
こんにちは、私はここにコードを追加することはできません、上記のコードをチェックする手助けできますか?それはあなたが言っているものに似ているかどうか。 –
私はそれをテストしませんでしたが、あなたのコードは正しいようです。あなたはそれを試して問題を抱えていましたか?私がこのアプローチを説明しようとするとうまくいくわけではありませんが、特にネットワークが悪い場合や、長時間書込みをやめた場合は特にそうではありません。 –
私は後で家にいるときに試してみます。ちなみに、別のコメント作成者が提案したように、Connectionを「Keep Alive」に設定する必要があります。 –