JSP-例外処理

この章では。JSPで例外を処理する方法について説明します。JSPコードを作成しているときに、コードの任意の部分で発生する可能性のあるコーディングエラーが発生する可能性があります。JSPコードで次のタイプのエラーが発生する可能性があります-

チェックされた例外

チェックされた例外は、通常、ユーザーエラーまたはプログラマーが予測できない問題である例外です。たとえば、ファイルを開く必要があるのにファイルが見つからない場合、例外が発生します。これらの例外は、コンパイル時に単純に無視することはできません。

ランタイム例外

ランタイム例外は、おそらくプログラマーが回避できたはずの例外です。チェックされた例外とは対照的に、実行時の例外はコンパイル時に無視されます。

エラー

これらはまったく例外ではありませんが、ユーザーまたはプログラマーの制御を超えて発生する問題です。エラーについてはほとんど何もできないため、エラーは通常、コードでは無視されます。たとえば、スタックオーバーフローが発生すると、エラーが発生します。また、コンパイル時には無視されます。

さらに、JSPコードで発生する実行時の例外/エラーを処理する方法について説明します。

例外オブジェクトの使用

例外オブジェクトは、Throwableのサブクラス(例:java.lang。NullPointerException)のインスタンスであり、エラーページでのみ使用できます。次の表に、Throwableクラスで使用できる重要なメソッドを示します。

S.No. 方法と説明
1

public String getMessage()

発生した例外に関する詳細メッセージを返します。このメッセージは、Throwableコンストラクターで初期化されます。

2

public Throwable getCause()

Throwableオブジェクトで表される例外の原因を返します。

3

public String toString()

次の結果と連結されたクラスの名前を返します。 getMessage()

4

public void printStackTrace()

の結果を出力します toString() スタックトレースとともに System.err、エラー出力ストリーム。

5

public StackTraceElement [] getStackTrace()

スタックトレース上の各要素を含む配列を返します。インデックス0の要素は呼び出しスタックの最上位を表し、配列の最後の要素は呼び出しスタックの最下部のメソッドを表します。

6

public Throwable fillInStackTrace()

このThrowableオブジェクトのスタックトレースを現在のスタックトレースで埋め、スタックトレースの以前の情報に追加します。

JSPには、指定するオプションがあります Error Page各JSPに対して。ページが例外をスローするたびに、JSPコンテナは自動的にエラーページを呼び出します。

以下は、エラーページを指定する例です。 main.jsp。エラーページを設定するには、<%@ page errorPage = "xxx" %> 指令。

<%@ 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>

ここで、以下に示す1つのエラー処理JSPShowError.jspを記述します。エラー処理ページにディレクティブが含まれていることに注意してください<%@ page isErrorPage = "true" %>。このディレクティブにより、JSPコンパイラは例外インスタンス変数を生成します。

<%@ page isErrorPage = "true" %>

<html>
   <head>
      <title>Show Error Page</title>
   </head>
   
   <body>
      <h1>Opps...</h1>
      <p>Sorry, an error occurred.</p>
      <p>Here is the exception stack trace: </p>
      <pre><% exception.printStackTrace(response.getWriter()); %></pre>
   </body>
</html>

アクセスする main.jsp、次のような出力が表示されます-

java.lang.RuntimeException: Error condition!!!
......

Opps...
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>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>Stack trace:</b></td>
            <td>
               <c:forEach var = "trace" 
                  items = "${pageContext.exception.stackTrace}">
                  <p>${trace}</p>
               </c:forEach>
            </td>
         </tr>
      </table>

   </body>
</html>

main.jspにアクセスすると、以下が生成されます-

Opps...

Error:

java.lang.RuntimeException: Error condition!!!

URI:

/main.jsp

Status code:

500

Stack trace:

org.apache.jsp.main_jsp._jspService(main_jsp.java:65)

org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)

javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Try ... Catchブロックを使用する

同じページ内のエラーを処理し、エラーページを発生させる代わりに何らかのアクションを実行したい場合は、 try....catch ブロック。

以下は、try ... catchブロックの使用方法を示す簡単な例です。main.jspに次のコードを入れましょう−

<html>
   <head>
      <title>Try...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