- 追加された行はこのように表示されます。
- 削除された行は
このように表示されます。
!!!Struts2 設定項目 - エラー処理
{{include_html banner_html, "!Struts"}}
Exceptionマッピングは、例外を送出するアクションクラスを取り扱うための強力な機能です。核心は、アクションメソッドにより送出された例外を自動的に補足し、事前定義されたResultにマップすることです。このような宣言的な戦略は、特にHibernateやAcegi のような実行時例外を送出するフレームワークでは役に立ちます。
フレームワークの他の部分の多くと同様に、Exceptionマッピングを機能させるためには、Interceptorが必要です。
以下は、Exceptionマッピングを有効にした、struts-default.xml の一部分です。
'''struts-default.xmlでの用例'''
...
<interceptors>
...
<interceptor name="exception" class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/>
...
</interceptors>
<interceptor-stack name="defaultStack">
<interceptor-ref name="exception"/>
<interceptor-ref name="alias"/>
<interceptor-ref name="servlet-config"/>
<interceptor-ref name="prepare"/>
<interceptor-ref name="i18n"/>
<interceptor-ref name="chain"/>
<interceptor-ref name="debugging"/>
<interceptor-ref name="profiling"/>
<interceptor-ref name="scoped-model-driven"/>
<interceptor-ref name="model-driven"/>
<interceptor-ref name="fileUpload"/>
<interceptor-ref name="checkbox"/>
<interceptor-ref name="static-params"/>
<interceptor-ref name="params"/>
<interceptor-ref name="conversionError"/>
<interceptor-ref name="validation">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
<interceptor-ref name="workflow">
<param name="excludeMethods">input,back,cancel,browse</param>
</interceptor-ref>
</interceptor-stack>
...
Exceptionマッピングは、例外とResultsをマッピングするだけで利用できます。フレームワークはExceptionマッピングの宣言<exception-mapping/>に、グローバルに利用するか、特定のアクションマッピングで使用するかの2つの方法を提供します。Exceptionマッピング要素は、exception と result の2つの属性を取ります。
Exceptionマッピングを宣言すると、Interceptorは、送出された例外と、宣言された例外との継承関係の間で、最も近いクラスを見つけます。
Interceptorは、アクションマッピングに適用可能な全ての宣言を検査します。最初は、ローカル続いてグローバルマッピングを検査します。
もし見つかれば、あたかもアクションから返されたかのように、Resultが実行されます。
このプロセスは、アクションからResultが返されるのと同一のルールに従う。最初にローカルアクションマッピングが検索され、見つからない場合、グローバルResultが探される。
以下は、Excetionマッピングの、ローカルおよびグローバルの例
'''struts.xmlでの例'''
<struts>
<package name="default">
...
<global-results>
<result name="login" type="redirect">/Login.action</result>
<result name="Exception">/Exception.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.sql.SQLException" result="SQLException"/>
<exception-mapping exception="java.lang.Exception" result="Exception"/>
</global-exception-mappings>
...
<action name="DataAccess" class="com.company.DataAccess">
<exception-mapping exception="com.company.SecurityException" result="login"/>
<result name="SQLException" type="chain">SQLExceptionAction</result>
<result>/DataAccess.jsp</result>
</action>
...
</package>
</xwork>
----
{{include_html banner_html, "!Struts"}}