无法从 JSP 错误页面重定向或刷新浏览器缓冲区

Can't Redirect From JSP Error Page Or Flush Browser Buffer

我正在尝试使用 JSP 的错误页面将 Java / JSP 网络应用程序和 运行 的错误处理改进为一个问题。如果在页面处理过程中没有处理异常,则重定向到 JSP 错误页面。

我注意到,当处理错误页面时,错误发生之前的输出流已提交给浏览器,因此浏览器最终得到错误发生之前的部分输出,无论错误页面应该是什么显示,这不是我想要显示或从 HTML 角度更正的内容。

我已经调查并发现似乎没有办法强制刷新浏览器的缓冲区并在提交输出流后仅将其替换为错误页面输出。我查看了刷新输出流并使用 Java 脚本强制清除页面:

<script>
window.stop();
document.body.innerHTML = "";
</script>

我还尝试使用 JSP 的 response.sendRedirect(url) 重定向到完全不同的 URL,但它不会重定向或刷新页面。为什么这不起作用?

所以,最后我使用普通的旧 HTML 在错误页面处理后重定向并且按预期工作。我的错误页面是 Error.jsp:

<%@ page isErrorPage="true" %>

<%
    String url = "ErrorDisplay?msg=" + URLEncoder.encode( exception.toString(), "UTF-8");
%>

<!-- This redirects -->
<meta http-equiv="Refresh" content="0; url=<%= url %>">

ErrorDisplay.jsp:

<h1>An error has occurred: <%= request.getParameter("msg") %></h1>

2019 年 5 月 19 日更新 -- 因此重定向修复并不总是有效。我仍然有部分错误导致页面输出卡在浏览器中,这导致重定向 HTML 不被识别为重定向 HTML 而只是文本输出。当错误出现在浏览器的部分输出后,有什么想法可以使 JSP 错误页面正常工作吗?

我找到了解决办法。将这些行添加到上面的 Error.jsp 文件会强制浏览器(至少是 FireFox)在重定向到 ErrorDisplay.jsp.

时刷新其当前页面
<meta http-equiv="cache-control" content="no-cache, must-revalidate, post-check=0, pre-check=0" />
<meta http-equiv="cache-control" content="max-age=0" />
<meta http-equiv="expires" content="0" />