java中HttpServlet中的response实时输出数据

ailuoyutian 2011-09-27 10:43:53
最近遇到个问题,比如我现在有个servlet继承了HttpServlet,在doPost方法里有这样一段代码


PrintWriter out = response.getWriter();
Date beginDate = new Date();
while(true){
try {
Date endDate = new Date();
//这里只是控制不要总是循环,没什么业务意义
if((endDate.getTime()-beginDate.getTime())/1000>12){
break;
}
Thread.sleep(3000);
out.print("test");
out.flush();

} catch (Exception e) {
e.printStackTrace();
}
}

按照我的设想,response先会向浏览器输出一个test,然后等待3秒后输出第二个test,可是实际情况是,这边的几个test字符串值是同时被response推送到浏览器的。
所以,我这边的疑惑是out.flush()这个方法没有起作用吗?不然,要是起了作用的话,它会立即将缓冲区里的数据输出到浏览器啊。或者还是我这边的线程调度引起的问题?
...全文
2789 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivan_070 2013-10-16
  • 打赏
  • 举报
回复
tomcat7支持
crazyvv 2013-10-14
  • 打赏
  • 举报
回复
我来挖个坟,有人能告诉我后来这个问题到底是怎么解决的么
阳明 to life 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ailuoyutian 的回复:]

引用 1 楼 zhouyuqwert 的回复:

你这一直在这循环着 根本就没给浏览器响应过一次,执行完给浏览器响应了 才会读取到
用js吧 后台应该没法这样实现的 你用后台注入js也行

这边响应浏览器的response是一直在这里等待的,相当于一个长连接,
今天早上到公司看了一下这个问题。之前提的这段代码是我在家里写的。用tomcat6部署,firebox调试的,当时在家里总是出……
[/Quote]
额- - 这个还能长连接的哈 学习了
注入js 就相当于
response输出一个js格式,
比如
out.println("<script>xxxx做定时输出某些内容</script>");
jsut_yi 2011-09-28
  • 打赏
  • 举报
回复
lz可以试试 dwr服务器推送,刚好可以实现你的需求。
ailuoyutian 2011-09-28
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 zhouyuqwert 的回复:]

你这一直在这循环着 根本就没给浏览器响应过一次,执行完给浏览器响应了 才会读取到
用js吧 后台应该没法这样实现的 你用后台注入js也行
[/Quote]
这边响应浏览器的response是一直在这里等待的,相当于一个长连接,
今天早上到公司看了一下这个问题。之前提的这段代码是我在家里写的。用tomcat6部署,firebox调试的,当时在家里总是出现那个问题,可是今天我把这段相同的代码放到我公司的电脑里,貌似又没有问题。所以又看了看代码,想到了一些新的东西。晚上再贴上来看看。

另外我想问问,后天注入js,是怎么一种实现?
wang12 2011-09-28
  • 打赏
  • 举报
回复
代码逻辑是没有问题,的确应该是每3s输出一个test字符串,这也是web服务器推送技术的实现原理。
阳明 to life 2011-09-27
  • 打赏
  • 举报
回复
你这一直在这循环着 根本就没给浏览器响应过一次,执行完给浏览器响应了 才会读取到
用js吧 后台应该没法这样实现的 你用后台注入js也行

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧