カスタムエラーページを作成する−exceptionオブジェクト−
exceptionオブジェクトは、JSPページ内で処理されない例外(エラー)があった場合、その例外情報を捕捉し、また、エラーページでは参照するためのオブジェクトです。
@pageディレクティブのisErrorPage属性がtrue(デフォルトはfalse)になっている場合のみ有効な暗黙オブジェクトで、falseの場合には使用できません。
カスタムエラーページ
デフォルトで表示されるエラーページは、開発者向けのものです。エラーが発生するまでのスタックトレースや例外が発生した個所のコードなどが表示されます。
しかし考えてみてください。サーバサイドのコードには、さまざまな「秘匿すべき情報」が含まれています。データベースにアクセスするためのユーザーIDやパスワードなどがまさにその一例です。
つまり、デフォルトのエラーページとは、本来、ユーザーに「見せてはならない」ページにほかならないのです。そこで、利用ユーザー向けに実運用局面では専用のカスタムエラーページを設置するのが一般的です。
以下のサンプルでは、exception_miss.jspで例外が発生した場合に(指定された初期化パラメータ「nothing」は存在しないものとします)、errorPage属性で指定されたカスタムエラーページexception_error.jspにリダイレクトします。
<%@ page contentType="text/html;charset=Shift_JIS" errorPage="exception_error.jsp" %> <% Class.forName(application.getInitParameter("nothing")); %>
<%@ page contentType="text/html;charset=Shift_JIS" isErrorPage="true" %> <html> <head> <title>カスタムエラーページ</title> </head> <body> <h1>エラーが発生しました</h1> <hr /> <pre><%=exception.toString()%></pre> <% application.log(exception.toString()); %> </body> </html>
toStringメソッドは、発生した例外クラス名とエラーメッセージとを表示します。また、同様の内容をコンテナの標準ログに記録します(logメソッド)。
exceptionオブジェクトのそのほかのメソッド
以下に、ここまで紹介したtoStringメソッドのほか、exceptionオブジェクトに用意されている主なメソッドを挙げておきます。
メソッド | 概要 |
---|---|
getLocalizedMessage() | 地域対応されたエラーメッセージを取得 |
getMessage() | 詳細なエラーメッセージを取得 |
printStackTrace(out) | スタックトレースをPrintWriterオブジェクトoutに出力 |
toString() | 例外クラス名とエラーメッセージを取得 |
ページ固有の初期化パラメータを管理する−configオブジェクト−
configオブジェクトは、デプロイメント・ディスクリプタ(WEB-INF/web.xml)上で定義されたサーブレット/JSP個々の初期化パラメータにアクセスするための一連のメソッドを提供します。
configオブジェクトが扱うのは、あくまでページ内でのみ使用される初期化パラメータに限定されますので、アプリケーション共通の初期化パラメータを表現したい場合には、applicationオブジェクトを使用してください。
ページ固有の初期化パラメータ
以下のサンプルでは、web.xml上で定義された初期化パラメータ「driverName」と「connectString」を引用し、データベースへの接続を確立してみることにしましょう。先のapplication_init.jspの例と異なり、ほかのページからはここで設定されたパラメータは参照できない点に注意してください。
データベース接続情報などは、一般的にアプリケーション共通の初期化パラメータとして指定するのが普通ですが、ここでは、ページ固有のパラメータとして
<%@ page contentType="text/html;charset=Shift_JIS" import="java.sql.*" %> <% Class.forName(config.getInitParameter("driverName")); Connection db=DriverManager.getConnection( config.getInitParameter("connectString")); /* データベースへの一連の処理 */ db.close(); %>
<?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <servlet> <servlet-name>config</servlet-name> <jsp-file>/chap5/config.jsp</jsp-file> <init-param> <param-name>driverName</param-name> <param-value>org.gjt.mm.mysql.Driver</param-value> </init-param> <init-param> <param-name>connectString</param-name> <param-value>jdbc:mysql://localhost/dbNameXx?user=UserXx&password= passwordXx&useUnicode=true&characterEncoding=Shift_JIS</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>config</servlet-name> <url-pattern>/chap5/config.jsp</url-pattern> </servlet-mapping> </web-app>
config.getInitParameterメソッドは、web.xmlの
デプロイメント・ディスクリプタの
configオブジェクトのそのほかのメソッド
以下に、ここまで紹介したgetInitParameterメソッドのほか、configオブジェクトに用意されている主なメソッドを挙げておきます。
メソッド | 概要 |
---|---|
getInitParameterNames() | すべての初期化パラメータ名を取得 |
getServletName() | 現在のサーブレット論理名( |
以上、JSPページで使用することができる主な暗黙オブジェクトについて、かなり駆け足ながら紹介してきました。もちろん、暗黙オブジェクトの用途はここで紹介した内容に限定されるものではなく、JSPページ全般で広く使用されるものです。さらに詳細を学習したいという方は、拙著『今日からつかえるJSP&サーブレットサンプル集(基礎編・応用編)』(秀和システム)や『プチリファレンスJSP&サーブレット』(同)、『10日でおぼえるJSP/サーブレット入門教室』(翔泳社)を参考にしてみてください。
次回からは、いよいよJavaに豊富に用意された主要なクラスライブラリを活用して、より実用的なJSPアプリケーションに挑戦することにします。どうぞお楽しみに。
Copyright © ITmedia, Inc. All Rights Reserved.