3
<%
response.getWriter().write("Hello world<BR>\n");
response.getWriter().flush();
wait(10000); // 10 seconds
response.getWriter().write("Goodbye happiness.<BR>\n");
%>

预期结果:浏览器中显示“Hello World”。10秒后,“再见幸福”。被展示。

发生了什么:页面在那里加载了 10 秒,然后最后显示“Hello World Goodbye Happiness”。

我想做的是在达到不同的里程碑时显示长时间运行的操作的状态。这可能吗?

我在 Windows 7 上使用 Eclipse EE(带有 Tomcat)。

4

3 回答 3

3
<html>
<body>
 You didn't tell us which browser you were using. Chrome and Firefox behave as you   expect them to do. 
But, IE needs some filler at the start of the page. IE will wait for a certain amount of content to render.
I am testing with IE8 and this works for me.
<br/>
<%
   out.print("Hello world<br/>");
   out.flush();
   Thread.sleep(3000); // 3 seconds for easy testing.
   out.print("Goodbye happiness.");
 %>
 </body>
 </html>
于 2012-07-12T03:22:40.403 回答
1

我认为这里的问题是wait(10000); // 10 seconds。不确定您看到的是什么响应,但您必须先锁定才能执行wait()。您应该将wait(10000); 行更改为以下之一:

synchronized (this){
    wait(10000); //10 secs
}

或者

Thread.sleep(10000);

即使那样,如果它不起作用,您也应该检查是否有任何东西在覆盖写入器并缓冲数据直到关闭。

于 2012-07-12T05:02:13.480 回答
0

在编写内容之前,您必须设置“Transfer-Encoding:chunked”标头。

response.setHeader("Transfer-Encoding", "chunked");
于 2012-07-12T02:06:28.787 回答