
新人SEのためのJava講座
作りながら理解する「JSPコーディング・テクニック」(2)
第4回 エラー対処とパフォーマンス
三谷純
タイムインターメディア
2002/3/13
| 前回「文字列処理と入力チェック」までで、入力チェックの仕組みが組み込まれた共有ブックマークが出来上がりました。本連載の最終回となる今回は、予期しない内部エラーが発生したときのエラーページの表示方法と、コネクションプールを用いたデータベースアクセスの効率化について述べ、最後にこの連載のまとめを行います。 |
| (1)内部エラーへの対応 |
JSPプログラムの内部エラーが発生した場合、通常ではエラーの内容を示すメッセージがブラウザに表示されます。開発者にとっては有益な情報ですが、このメッセージが一般ユーザーに見られてしまうと、JSPプログラムの内部構造が分かってしまい、都合が悪いことがあります。
JSPでは、内部エラーが発生したときにどのページを表示するかをページディレクティブで指定できます。この仕組みを使用することで、一般ユーザーにはエラーの詳細を隠しながら、管理者はエラーの詳細を調べられるようになります。当然のことながら、エラーログのチェックも重要ですが、Webページ上で簡単にエラーの内容を確認できる仕組みは便利です。
今回紹介する、内部エラーに対する処理の流れは下図のようになります。
| 図 エラー発生時の処理の流れ |
![]() |
まず、表示ページのディレクティブに次のように記述します。
<%@
page contentType="text/html; charset=euc-jp" errorPage="/error_page.jsp"
%> |
errorPage="/error_page.jsp"
の記述により、エラーが発生したときには、error_page.jspの内容が表示されるようになります。
今回、このerror_page.jspでは、アクセスされたリモートIPアドレスをチェックし、ローカルIPであればエラーの詳細を表示し、そうでなければerror_message.jspへ再度転送し、一般ユーザー向けのエラーメッセージを表示するようにします。
■エラーの発生するページ
それでは、動作テスト用に次のようなエラーが発生するJSPプログラムを作成してみます。
| エラーの発生する例のプログラム error_test.jsp |
1: <%@ page contentType="text/html;
charset=euc-jp" errorPage="/error_page.jsp" %> |
上記のプログラムに文法的な誤りはありませんが、実体が存在しない(nullである)オブジェクトnullObjectに対して、5行目でtoString()メソッドを呼び出しているため、このJSPプログラムでは実行時にNullPointerExceptionが発生します。
■エラーページ
次に、実際にエラーが発生した場合に表示される error_page.jsp を次のように作成してみます。
| エラーが発生したときに処理されるJSPページ error_page.jsp |
1:
<%@ page isErrorPage="true" contentType="text/html; charset=euc-jp"
%> |
エラーが発生したときに表示されるページとして使用されるJSPページでは、ディレクティブに
isErrorPage="true"
の記述を行います。
これにより、発生したエラーがexceptionという暗黙オブジェクトに設定されます。このオブジェクトを参照することでエラーの内容を知ることができます。
error_page.jspでは、リクエストのリモートIPアドレスを取得し、それが「192.168.」で始まる場合はローカルアドレスであると判断し、エラーの詳細を表示するための処理を行います。そうでない場合は、外部からのアクセスであると認識し、5行目でerror_message.jspへ処理を転送することで、一般ユーザー向けのエラーメッセージを表示します。
エラーの内容は16行目で表示し、
16: <b><%=
exception %></b><br> |
その詳細はexceptionオブジェクトのprintStackTrace メソッドにより、
19: <%
exception.printStackTrace(new java.io.PrintWriter(out)); %> |
のように出力させています。
■外部からのアクセスに対するエラーページ
外部からアクセスしているユーザーに対しては、error_message.jspという一般的なエラー表示用のページを表示させることにします。エラーの詳細はあえて表示せずに、管理者へ報告するように依頼します。このページは、次のような単純なHTML文として作成しました。
| 外部からのアクセスに対するエラーメッセージ error_message.jsp |
1:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> |
■エラーページの動作テスト
以上のようにしてerror_test.jspへアクセスすると、ローカルアドレスからアクセスした場合に次のようなメッセージが表示されます。
![]() |
外部からアクセスした場合には、次のようなメッセージが表示されます。
![]() |
アクセス元のIPアドレスにより、表示するエラーの内容を切り替えることができました。
| (2)コネクションプールの仕組み |
| Index | |
![]() |
(1)内部エラーへの対応 エラーの発生するページ エラーページ 外部からのアクセスに対するエラーページ エラーページの動作テスト |
| (2)コネクションプールの仕組み コネクションプールのクラス |
|
| (3)コネクションプールを使う
MyDBAccess での対応 連載の終わりに |
|
| 連載記事一覧 |
TechTargetジャパン
- 並列分散処理の常識をHadoopファミリから学ぶ (2012/2/8)
並列分散処理の課題やHadoopの長所/短所、そして短所を補うHadoop関連プロジェクトの構成や概要などを簡単に紹介 - WebLogicサーバ最新版「12c」の気になる4つの特徴 (2012/1/31)
久々にメジャーアップグレードしたJavaアプリケーションサーバについて、製品担当者に軽量インストーラなどの特徴を聞いた - GitHubをもっとソーシャルに使いこなすための7つ道具 (2012/1/23)
ソースコードホスティングのGitHub周辺で便利な新サービスが続々登場しているので、まとめて紹介しよう。特に連動クラウド「fluxflex」が注目だ - 新キャラ登場!スクラムやるならRedmineとALMinium (2011/12/26)
「黒板を“かんばん”にしてたら先生に怒られた(T_T)」「管理はPC内でやればいいのよ」「承知しました」
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -




