我目前正在处理 Struts 中的错误(404、500),因此任何遇到错误的用户都会看到一个包含所有详细信息的方便的错误页面。我还想在该错误页面中实现
sendmail
功能,以便他们可以立即将错误消息发送给开发团队。
sendmail
功能已经完成。我只需要找到一种方法在我的 JSP 页面上打印异常详细信息。
这是我所拥有的:
web.xml
:
<error-page>
<error-code>500</error-code>
<location>/jsp/common/error500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/jsp/common/error404.jsp</location>
</error-page>
JSP:
标题是:
<%@ page isErrorPage="true" import="java.io.*" contentType="text/plain"%>
尝试了以下方法:
1.
<div class="container" align="center">
ERROR 404
<html:errors/>
</div>
<div class="container" align="center">
ERROR 404
Message:
<%= exception.getMessage()%>
StackTrace:
<%
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
exception.printStackTrace(printWriter);
out.println(stringWriter);
printWriter.close();
stringWriter.close();
%>
</div>
如您所见,重定向效果很好。我只需要找到如何在 JSP 中打印堆栈跟踪。
普通 Struts 1 异常处理使用声明式处理。
除非您提供自己的密钥,否则异常将存储在
Globals.EXCEPTION_KEY
下。
S1 异常处理在指南的异常处理程序部分中有详细介绍。
如果绕过正常的异常处理机制,我不确定异常是否会存储在作用域中;你可以检查一下它是否在那里。然而,404 是一个与异常不同的问题。这是一个缺失的映射,不是例外。
如果您使用 Struts 2,这是一个不同但相似的过程。提问时包含 Struts 版本非常重要 - Struts 1 和 2、S1.2 和 S1.3 之间发生了很大变化。
(如果你使用的是S1.2之前的版本,嘘声。)
尝试一下
out.println(stringWriter.getBuffer().toString());
以下代码覆盖
RequestProcessor
以使 exception
在 JSP 中可用。
protected ActionForward processException(HttpServletRequest request,
HttpServletResponse response,
Exception exception,
ActionForm form,
ActionMapping mapping)
throws IOException, ServletException {
request.setAttribute("exception", exception);
return mapping.findForward("error");
}