JSPの例外処理
JSPアプリケーションを記述する場合、プログラマはいくつかのバグを見逃すことが、バグはプログラムのどこ表示されることがあります。 JSPコードは、一般的に次のカテゴリの例外です:
- チェック例外は:例外一般的なユーザー・エラーまたはプログラマ予期せぬエラーがあるチェックボックスをオンにしました。 たとえば、場合、ファイルは、例外がスローされ、その後、オープンするが、ファイルを見つけることができないです。 これらの異常は、もはや単に無視されてコンパイルすることはできません。
- ランタイム例外:ランタイム例外プログラマは、この異常がコンパイル時に無視され、回避されている可能性があります。
- エラー:そこには例外はありませんが、問題は、それがユーザやプログラマの制御を超えているということです。 エラーが頻繁にコード内で見過ごされている、あなたはほとんどどのようにそれを取ることはできません。 一例として、またはスタックオーバーフローエラーによります。 これらのエラーは、コンパイル時に無視されます。
このセクションでは、実行時例外やエラーを処理するためのいくつかのシンプルかつエレガントな方法を提供します。
例外オブジェクトを使用します
例外オブジェクトは、エラーページで利用できる、Throwableのサブクラスのインスタンスです。 次の表は、重要な点でThrowableクラスのいくつかを示しています。
いいえ。 | メソッド と 説明 |
---|---|
1 | 公共の文字列のgetMessage() 例外を返します。 この情報は、コンストラクタのThrowableに初期化されます |
2 | 公共ThrowablegetCause() 例外の原因、のThrowable型のオブジェクトを返します。 |
3 | 公共の文字列のtoString() クラスの名前を返します |
4 | 公共ボイドのprintStackTrace() System.errに例外スタックトレース出力 |
5 | 公共のStackTraceElement [] getStackTraceメソッド() 配列のスタックトレース要素の形で例外スタックトレースを返します。 |
6 | 公共ThrowablefillInStackTrace() 現在のスタックトレースは、Throwableオブジェクトを塗りつぶします |
JSPは、各JSPページのエラーページを指定するオプションが用意されています。 ページが例外をスローするたびに、JSPコンテナは自動的にエラーページを呼び出します。
次の例のmain.jspはエラーページを指定します。 <%@ページのerrorPageでは= "XXXXX"%>ディレクティブはエラーページを指定する使用します。
<%@ page errorPage="ShowError.jsp" %> <html> <head> <title>Error Handling Example</title> </head> <body> <% // Throw an exception to invoke the error page 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>Oppsja.</h1> <p>Sorry, an error occurred.</p> <p>Here is the exception stack trace: </p> <pre> <% exception.printStackTrace(response.getWriter()); %>
、ShowError.jspファイルの用途に着目し、<%の@ページのisErrorPage = "真"%> JSPコンパイラが例外インスタンス変数を生成する必要が伝えるディレクティブ、。
今main.jspページにアクセスしようと、それは次のような結果が生成されます。
java.lang.RuntimeException: Error condition!!! jajaja Oppsja. Sorry, an error occurred. Here is the exception stack trace:
エラーページでJSTLタグを使用します
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>Oppsja.</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>Stack trace:</b></td> <td> <c:forEach var="trace" items="${pageContext.exception.stackTrace}"> <p>${trace}</p> </c:forEach> </td> </tr> </table> </body> </html>
結果は以下のとおりであります:
使用してみてくださいja. catchブロック
ページ例外処理を入れたい、と別の例外は別の方法で処理された場合、あなたは、try ja. catchブロックを使用する必要があります。
次の例では、コードはmain.jspに配置されますのtry ja. catchブロックを使用する方法を示しています。
<html> <head> <title>Tryja.Catch Example</title> </head> <body> <% try{ int i = 1; i = i / 0; out.println("The answer is " + i); } catch (Exception e){ out.println("An exception occurred: " + e.getMessage()); } %> </body> </html>
それは次のような結果が生成されます、main.jspを訪問してみてください:
An exception occurred: / by zero