1

我目前正在管理 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 中打印堆栈跟踪。

4

2 回答 2

1

正常的 Struts 1 异常处理使用声明式处理。

Globals.EXCEPTION_KEY除非您提供自己的密钥,否则异常会存储在下面。

S1 异常处理在指南的异常处理部分中有详细说明。

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

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

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

于 2012-08-28T14:34:40.940 回答
0

试用

out.println(stringWriter.getBuffer().toString());

以下代码覆盖RequestProcessorexception在 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");

}

于 2012-08-28T14:43:30.017 回答