2013-03-09 52 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的彗星支持例子:

相关问题