我正在尝试改善Java / JSP网络应用程序的错误处理,并在使用JSP的错误页面时遇到了问题。如果在页面处理期间未处理异常,则将JSP错误页面重定向到。
我注意到,在处理错误页面时,错误发生之前的输出流已提交给浏览器,因此浏览器最终会出现错误发生之前的部分输出,无论错误页面应该显示什么,从HTML的角度来看,这不是我想要显示或纠正的内容。
我进行了调查,发现似乎没有必要强制刷新浏览器的缓冲区,并在提交输出流后立即将其替换为错误页面输出。我看过刷新输出流并使用JavaScript强制清除页面:
<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>
19年5月19日更新-因此重定向修复并非始终有效。我仍然有部分错误导致页面输出滞留在浏览器中,并且导致重定向HTML不能识别为重定向HTML,而只能识别为文本输出。在部分输出到浏览器后出现错误时,如何使JSP错误页面起作用的任何想法?
答案 0 :(得分:0)
我找到了解决方案。将这些行添加到上述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" />