14

Tomcat や Jetty などの Java サーブレット コンテナ内で発生するキャッチされない例外をキャッチする標準的な方法はありますか? ライブラリから提供される多くのサーブレットを実行しているため、try/catch コードを簡単に配置することはできません。提供された API を介して、Web アプリケーション (Jetty で実行される) でキャッチされなかったすべての例外を可能な限り一般的な方法でキャッチし、バグ トラッカーに記録することもできます。

例外のみをログに記録する必要はありません。カスタム エラー ページへのリダイレクトの問題であるかどうかはわかりません。ユーザーにエラーページが表示されないように、GWT-RPC を介してすべてを行います。

4

3 に答える 3

13

カスタムフィルターが実際に最も効果的だと思います。

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
    try {
        chain.doFilter(request, response);
    } catch (Throwable e) {
        doCustomErrorLogging(e);
        if (e instanceof IOException) {
            throw (IOException) e;
        } else if (e instanceof ServletException) {
            throw (ServletException) e;
        } else if (e instanceof RuntimeException) {
            throw (RuntimeException) e;
        } else {
            //This should never be hit
            throw new RuntimeException("Unexpected Exception", e);
        }
    }
}
于 2011-09-14T18:06:42.867 に答える
11

(デプロイメント記述子)ではweb.xml、要素を使用して、<error-page>例外タイプまたはHTTP 応答ステータス コードによってエラー ページを指定できます。例えば:

<error-page>
    <error-code>404</error-code>
    <location>/error/404.html</location>
</error-page>
<error-page>
    <exception-type>com.example.PebkacException</exception-type>
    <location>/error/UserError.html</location>
</error-page>

NetBeans 中心の説明については、Web アプリケーションの構成: エラー画面へのエラーのマッピング (Java EE 6 チュートリアル)を参照してください (または、Java EE 5 チュートリアルのバージョンを参照してください)。

于 2011-09-14T01:50:37.787 に答える
3

これがサーブレット コンテナで機能するかどうか、またはこの呼び出しがどこまで上流に行く必要があるかは 100% わかりませんが、静的な setDefaultUncaughtExceptionHandlerメソッドを呼び出して、Threadキャッチされていないすべての例外を処理するハンドラーを設定できます。

于 2011-09-14T02:39:25.273 に答える