Help us understand the problem. What is going on with this article?

【Spring】例外ハンドリングと仕組み

More than 1 year has passed since last update.

例外の種類

Webアプリケーションで発生する例外は、大きく3つに分類されます。

(1)システム例外

処理を継続することができない例外(アプリケーション自体のバグ、依存ライブラリのバグ、ミドルウェアやハードウェアの故障、システムリリースの枯渇、ネットワーク障害など)は、システム例外に分類されます。
システム利用者にはシステムエラー画面を表示し、システム運用者にはシステム障害が発生したことが通知されるように実装します。

(2)リクエスト不正を通知する例外

リクエストの内容が不正なときに発生する例外(存在しないパスへのリクエスト、バインディングエラー、入力チェックエラーなど)は、リクエスト不正を通知する例外に分類されます。
リクエスト不正を通知する例外が発生した場合は、システム利用者にリクエストの内容が間違っていることを通知するように実装します。

(3)アプリケーション例外

ビジネスルールに違反したときに発生する例外(ユーザー登録時のIDの重複エラー、排他エラー、在庫数の不足エラー)は、アプリケーション例外に分類されます。
アプリケーション例外が発生した場合は、アプリケーションの要件が決められているエラー処理を実装します。

例外の発生箇所とハンドリング方法

Screen Shot 2017-02-16 at 0.41.13.png

① Servlet Filter

Servlet Filterで発生する例外に対する例外ハンドリング。Servlet Filterの中で発生した例外例外は、サーブレットコンテナのエラーページ機能 (web.xmlの要素)を使用してエラー処理をする。

② DispatcherServlet

フロントコントローラーが行うフレームワーク処理で発生する例外に対する例外ハンドリング。
Spring MVCのフロントコントローラーで発生した例外は、Spring MVCが提供する例外ハンドリングの仕組み(HandlerExceptionResolver)を使用してエラー処理を実装する。

③ アプリケーション

Controller以降の処理(アプリケーションの個別の処理)で発生する例外ハンドリング。
アプリケーションの中で発生した例外は、プログラム内でのtry-catchやSpring MVCが提供する例外ハンドリング仕組み(HandlerExceptionResolver)を使用してエラー処理を実装する。

④ View(JSPなど)

View内で発生する例外に対する例外ハンドリング。
Viewの中で発生した例外は、サーブレットコンテナのエラーページ機能 (web.xmlの要素)を使用してエラー処理をする。

サーブレットコンテナのエラーページ機能の利用

サーブレットコンテナは、サーブレットコンテナまで通知された例外やエラー応答(HttpServletResponseのsendErrorメソッドの呼び出し)をハンドリングし、遷移先のページを指定することができる機能を提供しています。

エラー時の遷移先ページは、web.xmlの要素を使用して設定します。

<error-page>
    <error-code>500</error-code>
    <location>/WEB-INF/error/defailtError.jsp</location>
</error-page>
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした