プログラミング
 Computer >> コンピューター >  >> プログラミング >> プログラミング

JSTLタグを使ってJSPのエラーオブジェクトを処理する方法

JSTLタグを活用したエラーページの作成

JSPで例外が発生した際に表示されるエラーページは、従来のスクリプトレットではなくJSTL(JSP Standard Tag Library)タグを使用することで、可読性と保守性を大きく向上させることができます。ここでは、構造が整い、より詳細な情報を表示できるエラーページ ShowError.jsp の作成方法を紹介します。

使用するEL式のポイント

  • ${pageContext.exception} … 発生した例外オブジェクトそのものを取得します。
  • ${pageContext.errorData.requestURI} … エラーが発生したリクエストのURIを取得します。
  • ${pageContext.errorData.statusCode} … HTTPステータスコードを取得します。
  • ${pageContext.exception.stackTrace} … スタックトレースの要素を取得し、<c:forEach>タグで1行ずつ表示します。

ShowError.jsp のサンプルコード

<%@ taglib prefix = "c" uri = "https://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>

なお、このエラーページを利用するには、エラーが発生しうる側のJSPで <%@ page errorPage="ShowError.jsp" %> のようにページディレクティブを指定しておく必要があります。

実行結果

この設定を行った状態で main.jsp にアクセスすると、以下のような情報が表形式で整形されて表示されます。

エラー:java.lang.RuntimeException: Error condition!!!
URI:/main.jsp
ステータスコード:500
スタックトレース: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)

まとめ

JSTLとEL式を組み合わせれば、Javaコードをほとんど書かずに、例外メッセージ・リクエストURI・ステータスコード・スタックトレースまでを一覧できる高機能なエラーページを簡単に実装できます。デバッグ効率の向上にもつながるため、本番環境向けのエラーハンドリングとしてぜひ活用してください。

  1. JavaScriptでNumberオブジェクトを作成する方法をわかりやすく解説

    Numberオブジェクトとは JavaScriptのNumberオブジェクトは、整数や浮動小数点数などの数値データを表すラッパーオブジェクトです。プリミティブな数値に対して各種プロパティやメソッドを利用できるようにする役割を持ちます。 Numberオブジェクトの作成方法 Numberオブジェクトを作成するには、次のような構文を使用します。 var val = new Number(number); ここで重要なポイントがひとつあります。new演算子を付けずにNumber()を呼び出した場合は、オブジェクトを生成するのではなく、引数を数値へ変換する型変換(キャスト)として機能します。たとえ

  2. JavaScriptでURLオブジェクトを作成する方法をわかりやすく解説

    JavaScriptでは、標準組み込みのURLコンストラクタを使うことで、URL文字列からURLオブジェクトを簡単に生成できます。URLオブジェクトを作成すると、プロトコル(protocol)やホスト名(host)、パス(pathname)など、URLを構成する各要素に個別にアクセスできるようになるため、URLの解析や操作がとても便利になります。 URLオブジェクトの作成例 以下は、JavaScriptでURLオブジェクトを作成し、ボタンをクリックするとその各プロパティを画面に表示するサンプルコードです。 <!DOCTYPE html> <html lang="