2013-03-09 40 views
2

我有一個與while (true)的JSP,其中數據發送到瀏覽器。代碼片段out.print不會將數據推送到瀏覽器

while (true) { 
    out.print("pushing some data to browser"); 
    out.flush(); 

    try { 
     Thread.sleep(1000); 
    } catch (InterruptedException e) { 
    } 
} 

它大部分時間工作,但很少數據不會以1秒的間隔發送到瀏覽器。

而不是它排隊並同時拋出所有數據。

+0

什麼是週期性地發送數據的動機是什麼?你是否想要實現一個Comet消息系統? – zz3599 2013-03-09 16:15:15

+0

我正在使用此循環作爲pushlet概念(將數據從服務器推送到客戶端) – sasikals26 2013-03-09 18:31:16

回答

0

下面是解釋它不工作的原因: JSP是運行時的servlet對象,JSP scriplet /表達式是作爲Servlet對象的service()方法的一部分被調用的。

在這種情況下,當您訪問JSP頁面時,它將調用service()方法並保持數據流出,直到線程被應用程序服務器中斷爲止(InterruptedException),最終呈現頁面並一次顯示數據。

您應該考慮通過擴展HttpServlet來實現CommetServlet,這樣可以節省應用服務器支持。

App Server的彗星支持例子:

相關問題