web-dev-qa-db-ja.com

サーブレットによってランタイム例外がスローされたときに、ブラウザーにユーザーフレンドリーなエラーページを表示する方法は?

JSFを使用してWebアプリケーションを開発しています。できたのでテストしましたが、時々ランタイム例外がスローされます。

だから、例外がスローされるたびにユーザーを特別なエラーページにリダイレクトする方法(完全なTomcatログで500エラーを表示するのではなく)?

39
Roman

特定の Throwable (またはそのサブクラス)または HTTPステータスコード に表示するページを指定できる<error-page>web.xmlを宣言するだけです=。例えば。

<error-page>
    <exception-type>Java.lang.Exception</exception-type>
    <location>/error.jsp</location>
</error-page>

Java.lang.Exceptionのサブクラスにエラーページが表示されますが、Java.lang.ThrowableJava.lang.Errorは表示されません。これにより、あらゆる種類のThrowableに対して独自のエラーページを作成できます。例えば。 Java.sql.SQLExceptionJava.io.IOExceptionなど。

または、

<error-page>
    <error-code>500</error-code>
    <location>/error.jsp</location>
</error-page>

hTTP 500エラーでエラーページが表示されますが、404(ページが見つかりません)、403(禁止)などに別のエラーページを指定することもできます。

<%@page isErrorPage="true" %>の先頭でerror.jspを宣言すると、ELで${exception}によってスローされた Exception (したがって、そのゲッターもすべて)にアクセスできます。

<p>Message: ${exception.message}</p>

このテーマに関するJava EE 5チュートリアル も参照してください。

59
BalusC

Web.xmlで:

<error-page>
  <error-code>500</error-code>
  <location>/errorpages/500.jsp</location>
</error-page>

特定の例外またはThrowableを拡張する例外をキャッチすることもできます。

<error-page>
  <exception-type>Java.lang.Throwable</exception-type>
  <location>/errorpages/500.jsp</location>
</error-page>
10
Pascal Thivent
    If you use Java config in spring, you can follow,

   @Configuration
   public class ExcpConfig {

    @Bean(name = "simpleMappingExceptionResolver")
    public SimpleMappingExceptionResolver simpleMappingExceptionResolver() {
        SimpleMappingExceptionResolver resolver= new SimpleMappingExceptionResolver();

        Properties mappings = new Properties();
        resolver.setExceptionMappings(mappings); // None by default
        resolver.setExceptionAttribute("ErrorOccurred"); // Default is "exception"
        resolver.setDefaultErrorView("500"); // 500.jsp
        return r;
    }

}
0
Md. Kamruzzaman