Spring MVCによるカスタムエラーページ

Spring MVCを使用したカスタムエラーページ

1. 概要

Webアプリケーションの一般的な要件は、カスタマイズされたエラーページです。

たとえば、Tomcat上でバニラのSpringMVCアプリを実行しているとします。 ユーザーがブラウザに無効なURLを入力すると、それほど使いやすい青と白のスタックトレースが表示されますが、これは理想的ではありません。

このチュートリアルでは、いくつかのHTTPエラーコード用にカスタマイズされたエラーページを設定します。

作業上の前提は、読者がSpringMVCでの作業にかなり慣れていることです。そうでない場合は、this is a great way to start

2. 簡単な手順

ここで実行する簡単な手順から始めましょう。

  1. エラーが生成されるたびにエラーを処理するメソッドにマップする単一のURL/errorsweb.xmlに指定します

  2. マッピング/errorsを使用してErrorControllerというコントローラーを作成します

  3. 実行時にHTTPエラーコードを把握し、HTTPエラーコード.に従ってメッセージを表示します。たとえば、404エラーが生成された場合、ユーザーには‘Resource not found' ,のようなメッセージが表示されますが、500の場合はエラー、ユーザーは‘Sorry! An Internal Server Error was generated at our end'の行に何かが表示されるはずです

3. web.xml

web.xml:に次の行を追加することから始めます


    /errors

この機能は、3.0以降のサーブレットバージョンでのみ使用可能です。

アプリ内で生成されるエラーは、HTTPエラーコードに関連付けられます。 たとえば、ユーザーがブラウザにURL/invalidUrlを入力したが、そのようなRequestMappingがSpring内で定義されていなかったとします。 次に、基になるWebサーバーによって生成された404のHTTPコード。 web.xmlに追加したばかりの行は、URL/errors.にマップされているメソッドで記述されたロジックを実行するようにSpringに指示します。

ここで簡単に説明します。対応するJavaサーブレット構成には、残念ながらエラーページを設定するためのAPIがありません。したがって、この場合、実際にはweb.xmlが必要です。

4. コントローラー

次に、ErrorControllerを作成します。 エラーをインターセプトし、エラーページを表示する単一の統合メソッドを作成します。

@Controller
public class ErrorController {

    @RequestMapping(value = "errors", method = RequestMethod.GET)
    public ModelAndView renderErrorPage(HttpServletRequest httpRequest) {

        ModelAndView errorPage = new ModelAndView("errorPage");
        String errorMsg = "";
        int httpErrorCode = getErrorCode(httpRequest);

        switch (httpErrorCode) {
            case 400: {
                errorMsg = "Http Error Code: 400. Bad Request";
                break;
            }
            case 401: {
                errorMsg = "Http Error Code: 401. Unauthorized";
                break;
            }
            case 404: {
                errorMsg = "Http Error Code: 404. Resource not found";
                break;
            }
            case 500: {
                errorMsg = "Http Error Code: 500. Internal Server Error";
                break;
            }
        }
        errorPage.addObject("errorMsg", errorMsg);
        return errorPage;
    }

    private int getErrorCode(HttpServletRequest httpRequest) {
        return (Integer) httpRequest
          .getAttribute("javax.servlet.error.status_code");
    }
}

5. フロントエンド

デモンストレーションのために、エラーページを非常にシンプルかつコンパクトに保ちます。 このページには、白い画面に表示されるメッセージのみが含まれます。 errorPage.jsp :というjspファイルを作成します

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ page session="false"%>


    Home


    

${errorMsg}

6. テスト

アプリケーション内で発生する最も一般的な2つのエラー、HTTP 404エラーとHTTP 500エラーをシミュレートします。

サーバーを実行し、localhost:8080/spring-mvc-xml/invalidUrl.に進みます。このURLは存在しないため、エラーページに「Http Error Code : 404. Resource not found'.」というメッセージが表示されるはずです。

ハンドラーメソッドの1つがNullPointerException.をスローするとどうなるか見てみましょう次のメソッドをErrorController:に追加します

@RequestMapping(value = "500Error", method = RequestMethod.GET)
public void throwRuntimeException() {
    throw new NullPointerException("Throwing a null pointer exception");
}

localhost:8080/spring-mvc-xml/500Error.に移動します。「HttpError Code:500」というメッセージが表示された白い画面が表示されます。 内部サーバーエラー'。

7. 結論

Spring MVC.を使用してさまざまなHTTPコードのエラーページを設定する方法を確認しました。HTTPエラーコードに従ってエラーメッセージが動的に表示される単一のエラーページを作成しました。