我們知道在Java EE servlet/jsp中,客戶端可以爲一個http請求獲取一個http響應。我想實現一些具有未知長度的http響應。我希望服務器在客戶端發送第一個http請求後繼續爲客戶端推送數據。在這種情況下,我不想使用AJAX,因爲AJAX非常重。HTTP響應的未知長度
例如,我想創建一個可以從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」。 –