Spring MVCによるカスタムエラーページ
1概要
Webアプリケーションで共通の要件は、カスタマイズされたエラーページです。
たとえば、Tomcatの上で一般的なSpring MVCアプリを実行しているとします。ユーザーが自分のブラウザに無効なURLを入力すると、それほどユーザーフレンドリーではない青と白のスタックトレースが表示されます。これは理想的ではありません。
このチュートリアルでは、いくつかのHTTPエラーコード用にカスタマイズされたエラーページを設定します。
実用的な前提は、読者がSpring MVCでかなり快適に作業できることです。そうでない場合は、
これは開始するのに最適な方法です
。
** 2簡単なステップ
**
ここで説明する簡単な手順から始めましょう。
-
以下のメソッドに対応する
web.xml
に単一のURL
/errors
を指定します.
エラーが発生したときはいつでもエラーを処理します
。マッピング
/errors
を使用して
ErrorController
という名前のコントローラを作成します。
-
実行時にHTTPエラーコードを見つけてメッセージを表示する
HTTPエラーコード
__.
によると、例えば、404エラーが発生した場合、ユーザは
‘Resource not found ‘のようなメッセージを見るべきです。 ‘ごめんなさい!内部サーバーエラーが発生しました。
3
web.xml
まず
web.xml
に次の行を追加します。
<error-page>
<location>/errors</location>
</error-page>
この機能は、サーブレットのバージョンが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"%>
<html>
<head>
<title>Home</title>
</head>
<body>
<h1>${errorMsg}</h1>
</body>
</html>
6. テスト中
どのアプリケーションでも発生する最も一般的な2つのエラー、HTTP 404エラーとHTTP 500エラーをシミュレートします。
サーバーを起動し、
_ localhost:8080/spring-mvc-xml/invalidUrlにアクセスしてください。このURLは存在しないため、エラーページ ‘
Http Error Code:404. Resource not found’が表示されることが予想されます。 _
ハンドラメソッドの1つが__NullPointerExceptionをスローするとどうなるかを見てみましょう。
@RequestMapping(value = "500Error", method = RequestMethod.GET)
public void throwRuntimeException() {
throw new NullPointerException("Throwing a null pointer exception");
}
__localhost:8080/spring-mvc-xml/500Errorに移動します。 ‘Http Error Code:500. Internal Server Error’というメッセージを含む白い画面が表示されます。
7. 結論
Spring MVCを使用して、さまざまなHTTPコードにエラーページを設定する方法を見ました。____エラーメッセージがHTTPエラーコードに従って動的に表示される単一のエラーページを作成しました。