JSP刷新缓冲区混乱

时间:2013-12-30 18:12:35

标签: jsp java-ee flush java-ee-7 jspinclude

如果我有以下代码:

<%
out.write("This will print!<br/>");
out.flush();
out.write("This will also print!<br/>");
out.flush(); <-- Should fail.
out.write("This will get sent to the client too!<br/>");
%>

为什么允许第二次冲洗?
我以为flush会提交响应并发送给客户端。提交响应后,您将无法再写入和刷新。第一次刷新提交响应并已发送给客户端。所以我希望第二次冲洗失败。

我还读到,对于requestDispatcher上的include,可以根据需要刷新次数(但不能用于requestDispatcher转发)。怎么会这样?

我对此很困惑,我很感激任何启发。 感谢。

1 个答案:

答案 0 :(得分:4)

你可以多次冲洗。调用刷新(由容器自动或由代码手动)导致输出缓冲区中的现有数据发送到客户端。首次刷新后,响应将标记为已提交。我们没有机会在响应提交后编写响应头/ cookie。每次刷新后,缓冲区将被重置以存储下一次内容写入的数据。您可以手动进行刷新,或者当缓冲区已满或请求结束时,容器将进行刷新。