0

我今天遇到了一个奇怪的问题。我有一个 head.jsp(以 out.flush 结尾),它被其他页面包含。大多数页面都没有这个问题 out.flush(); 但是我的一个页面在 jboss 4.2.2 GA 上因 IllegalStateException 而失败。

我检查了我认为的相关java文件ResponseFacade.java。并看到由于 if (isCommitted) 检查而发生的问题。

我刚刚从有问题的页面中删除了包含语句,它现在正在工作。但问题是;为什么其他页面没有问题,而只有一个页面有问题?

或者如果其他页面正在包含一个 jsp 文件。我需要在这个包含的页面中使用 out.flush() 吗?

4

4 回答 4

2

您的 Web 容器当然会在需要时刷新响应的输出流。您不需要任何调用即可刷新。顺便说一句,JSP 中的 Java 代码无论如何都是不好的做法。

于 2011-12-30T14:06:36.060 回答
1

我没有相同的设置,但有类似的问题。

<% out.flush(); %>我的jsp中,<jsp:include page="abc.jsp" />不再工作了。不包括指定的页面。

我通过使用解决了它<%@ include file="abc.jsp" %>

希望这可以帮助。

于 2013-02-16T18:10:00.143 回答
0

当您 flush() 时,您将缓冲区的内容发送到客户端,然后清空缓冲区。没有不好的做法,您可以根据需要多次冲洗。

请记住,JSP 页面的第一个 flush() 也会发送 HTTP HEADER,并且缓冲区被标记为已提交(状态 -> isCommitted)。含义:此时您不能再发送 HTTP HEADER(例如 page_forward、cookies)。

可能是您尝试在 flush()完成后(包含后)在页面中发送一些 HTTP HEADER。

于 2015-05-11T15:35:49.853 回答
0

这是唯一对我有用的方法(JSP over Tomcat/Apache)。

主.jsp

<jsp:include page="flush.jsp" flush="true" />

Flush.jsp(空白)

<%
%>
于 2017-02-24T02:05:37.393 回答