例外の検出
例外を検出するための JSP ページをコーディングできる一般的な方法には、以下の 3 つの方法があります。
• エラーページを使用する。
• try/catch ブロックを使用する。
• unit タグとネストされた success タグおよび failure タグを使用する (JSP では非推奨)。
エラーページの使用
エラーページを作成して JSP ページの page ディレクティブで指定することによって、そのページから例外を検出できます。ページがエラーページであることを page ディレクティブで指定するには、isErrorPage 属性を true に設定します。例:
<%@page language="java" isErrorPage="true"
import="java.io.*,com.infoengine.util.*,com.infoengine.exception.*,
com.infoengine.exception.fatal.*,com.infoengine.exception.nonfatal.*,
java.util.Hashtable"%>
エラーページを使用するには、ほかのページの page ディレクティブでそのページをエラーページとして指定します。たとえば、以下の page ディレクティブでは errorPage 属性が IEError.jsp に設定されています。
<%@page language="java" session="false" errorPage="IEError.jsp"%>
エラーページは、エラー処理の共通の場所として機能し、エラーが発生した場合の操作に一貫性をもたらすため、きわめて便利です。エラーページは、例外のタイプに基づいて例外を処理し、意味のある情報をユーザーに提供するように作成することもできます。
try/catch ブロックの使用
スクリプトレット内で try/catch ブロックを使用して、JSP の特定の部分で例外を検出できます。これは、unit タグまたは failure タグを使用した例外処理と似ていますが、これらのタグを使用する場合よりも、例外処理をプログラム的に行うことができます。以下に例を示します。
<%
try {
%>
<!-- webject or task invocations -->
<%
// catch statement appropriate given the contents of this block
} catch ( AdapterException ae ) {
//handle the adapter exception
} catch ( IDPartialResultsException partial ) {
// extract and display the partial results
}
// etc.
%>
unit タグの使用
ページで unit タグを使用し、その unit 内に 1 つまたは複数の failure ブロックを含めることによって、ページの特定の部分で例外を検出できます。前のセクションに記載されている failure ブロックは、すべての失敗を対象としていました。一般的な failure ブロックだけでなく、特定の例外を検出する failure ブロックも作成できます。以下の failure ブロックでは、4 つの異なる例外が検出されます。
<ie:failure exception="AdapterException">
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT"data="FAILURE=AdapterError"/>
<ie:param name="DELIMITER"data=":"/>
<ie:param name="GROUP_OUT"data="failure"/>
</ie:webject>
<ie:webject name="Object-XML" type="DSP"/>
</ie:failure>
<ie:failure exception="IEPartialResultsException">
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT"data="FAILURE=PartialResults"/>
<ie:param name="DELIMITER"data=":"/>
<ie:param name="GROUP_OUT"data="failure"/>
</ie:webject>
<ie:webject name="Object-XML" type="DSP"/>
</ie:failure>
<ie:failure exception="IEInternalServiceException">
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT"
data="FAILURE=InternalServiceError"/>
<ie:param name="DELIMITER"data=":"/>
<ie:param name="GROUP_OUT"data="failure"/>
</ie:webject>
<ie:webject name="Object-XML" type="DSP"/>
</ie:failure>
<ie:failure exception="IEFatalException">
<ie:webject name="Create-Group" type="GRP">
<ie:param name="ELEMENT"data="FAILURE=FatalException"/>
<ie:param name="DELIMITER"data=":"/>
<ie:param name="GROUP_OUT"data="failure"/>
</ie:webject>
<ie:webject name="Object-XML" type="DSP"/>
</ie:failure>
Throw-Exception Webject を使用して独自の例外を表示したり、ページまたはタスク内から例外を再表示したりすることもできます。Task Webject の実行時に発生したすべての例外は、SERVER コンテキストグループに exception-class および exception-message という名前の属性として自動的に入力されます。したがって、例外が何であるかを知らなくても Throw-Exception Webject を使用して例外とそのメッセージを再表示できます。