English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
JSPプログラムを書く際には、プログラマーがBUGを漏らすことがあります。これらのBUGはプログラムのどこにでも現れる可能性があります。JSPコードでは通常以下のようないくつかの例外があります:
このセクションでは、ランタイム例外とエラーを処理するいくつかのシンプルで洗練された方法を示します。
exceptionオブジェクトはThrowableのサブクラスの例で、エラーページ内でのみ使用できます。以下はThrowableクラスの中で重要な方法の一覧です:
番号 | メソッド&説明 |
---|---|
1 | public String getMessage() 例外の情報を返します。この情報はThrowableコンストラクタで初期化されます |
2 | public Throwable getCause() 例外の原因を返します。これはThrowableオブジェクトのタイプです |
3 | public String toString() クラス名を返します |
4 | public void printStackTrace() 例外のスタックトレースをSystem.errに输出します |
5 | public StackTraceElement [] getStackTrace() 例外のスタックトレースをスタックトレース要素の配列の形式で返します |
6 | public Throwable fillInStackTrace() Throwableオブジェクトに現在のスタックトレースを埋め込みます |
JSPは、各JSPページにエラーページを指定するオプションを提供します。ページが例外を投げた場合、JSPコンテナは自動的にエラーページを呼び出します。
次の例では、main.jspにエラーページを指定しています。エラーページを指定するために<%@page errorPage="XXXXX"%>指令を使用します。
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>エラーハンドリング例</title> </head> <body> <% // エラーページを呼び出すために例外を投げます int x = 1; if (x == 1) { throw new RuntimeException("Error condition!!!"); } %> </body> </html>
今、ShowError.jspファイルを以下のように記述します:
<%@ page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <p>ごめんなさい、エラーが発生しました。/p> <p>例外のスタックトレースが以下の通りです:/p> <pre> <% exception.printStackTrace(response.getWriter()); %>
ShowError.jspファイルが<%@page isErrorPage="true"%>指令を使用していることに注意してください。この指令はJSPコンパイラに例外サンプル変数を生成する必要があることを伝えます:
今、main.jspページにアクセスしてみましょう。以下のような結果が得られます:
java.lang.RuntimeException: Error condition!!! ...... Opps... ごめんなさい、エラーが発生しました。 例外のスタックトレースが以下の通りです:
可以利用JSTLタグでエラーページShowError.jspを記述できます。この例のコードは前の例のコードの論理がほぼ同じですが、より良い構造があり、より多くの情報を提供できます:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <%@page isErrorPage="true" %> <html> <head> <title>Show Error Page</title> </head> <body> <h1>Opps...</h1> <table width="100%" border="1"> <tr valign="top"> <td width="40%"><b>Error:</b></td> <td>${pageContext.exception}</td> </tr> <tr valign="top"> <td><b>URI:</b></td> <td>${pageContext.errorData.requestURI}</td> </tr> <tr valign="top"> <td><b>Status code:</b></td> <td>${pageContext.errorData.statusCode}</td> </tr> <tr valign="top"> <td><b>スタックトレース:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
実行結果は以下の通りです:
例外処理をページに配置し、異なる例外に対して異なる処理を行いたい場合は、try…catch ブロックを使用する必要があります。
以下の例は、try…catch ブロックを使用する方法を示しています。これらのコードを main.jsp に配置してください:
<html> <head> <title>Try...Catch 例</title> </head> <body> <% try{ int i = 1; i = i / 0; out.println("答えは ") + i); } catch (Exception e){ out.println("例外が発生しました: ") + e.getMessage()); } %> </body> </html>
main.jspにアクセスしてみてください、以下のような結果が得られます:
例外が発生しました: / by zero