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

JSP で使用できるようにするには、次のコード オーバーライドRequestProcessorを使用します。exception

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 に答える