如何使用异常详细信息和sendmail按钮构建Struts自定义错误页面

时间:2012-08-28 14:25:52

标签: java error-handling struts

我目前正致力于在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>

2

<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中打印堆栈跟踪。

2 个答案:

答案 0 :(得分:1)

普通Struts 1异常处理使用声明性处理。

例外情况存储在Globals.EXCEPTION_KEY下,除非您提供自己的密钥。

S1异常处理详见本指南的Exception Handler部分。

如果绕过正常的异常处理机制,我不确定异常是否会存储在范围内;你可以检查它是否在那里。然而,404是一个与例外不同的问题;这是一个缺失的映射,而不是例外。

如果您使用的是Struts 2,则它是一个不同但相似的过程。在提问时包含Struts版本非常重要 - Struts 1和2以及S1.2和S1.3之间的内容发生了很大的变化。

(如果您在S1.2之前使用的是版本,请嘘嘘。)

答案 1 :(得分:0)

试试

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");

}