ページの先頭行へ戻る
 Apcoordinatorユーザーズガイド

17.3.1 JSPエラーページ

ビジネスクラス、セションクラス、アプリケーションクラスで例外が発生し、try-catch節やhandleExceptionメソッドで処理されなかった場合、JSPエラーページが表示されます。handleExceptionメソッドによるエラー処理については“4.2 エラー処理”を参照してください。

JSPエラーページは2箇所で指定可能です。

uji:dispatchで指定したエラーページは、ビジネスクラス処理中の例外についてのみ使用され、@pageディレクティブで指定したエラーページより優先して使用されます。 @pageディレクティブで指定したエラーページには、アプリケーションの全てのエラーが表示されます。

<%@ page errorPage="jspError.jsp" %>
<uji:dispatch errorPage="dispatchError.jsp" />

JSPエラーページではJSPスクリプトレットを使用して例外の処理ができます。以下はJSPエラーページの例です。

<HTML>
<HEAD>
<META http-equiv="Content-Type" content="text/html; charset=shift_jis">
<%@ page contentType= "text/html; charset=shift_jis" %>
<%@ page isErrorPage="true" %>
<%@ page import="java.io.PrintWriter, com.fujitsu.uji.ApplicationProfile, 
  com.fujitsu.uji.log.*" %>
</HEAD>
<BODY>

<PRE>
<%
  if(exception != null) {
    // HTML画面に出力する
    Throwable ex;
    // 注意:HTML画面への出力はセキュリティ上の問題を内包しています。
    // 以下のソースはデバッグ時のみ利用してください。
    /*
    PrintWriter writer = new PrintWriter(out);
    ex = exception;
    while(ex instanceof NestedException) {
      String msg = ex.getClass().getName() + " : " + ex.getMessage();
      msg = msg.replace('<','[');
      msg = msg.replace('>',']');
      writer.println(msg);
      ex = ((NestedException)ex).getRootCause();
    }
    ex.printStackTrace(writer);
    */

    // アプリケーションログに出力する
    ApplicationProfile ap = (ApplicationProfile)application.getAttribute 
                              (ApplicationProfile.APPLICATIONKEY);
    if(ap != null) {
      LogComposer lc = ap.getLogComposer();
      if(lc != null) {
        ex = exception;
        while(ex instanceof NestedException) {
          String msg = ex.getClass().getName() + " : " + ex.getMessage();
          msg = msg.replace('<','[');
          msg = msg.replace('>',']');
          lc.println(msg);
          ex = ((NestedException)ex).getRootCause();
        }
        lc.printStackTrace(ex);
      }
    }
  }
%>
</PRE>
</BODY>
</HTML>

ポイント

HTML画面へのスタックトレースの出力は、セキュリティ上の問題を内包します。運用時は適切な画面を作成する必要があります。