| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「Struts2 設定項目 - エラー処理」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
(ページの作成:「==Struts2 設定項目 - エラー処理== {{include_html banner_html, "!Struts"}} Exceptionマッピングは、例外を送出するアクションクラスを取…」)
 
10行目: 10行目:
 
'''struts-default.xmlでの用例'''
 
'''struts-default.xmlでの用例'''
 
  ...
 
  ...
  <interceptors>
+
  &lt;interceptors&gt;
 
     ...
 
     ...
     <interceptor name="exception" class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/>
+
     &lt;interceptor name="exception" class="com.opensymphony.xwork.interceptor.ExceptionMappingInterceptor"/&gt;
 
     ...
 
     ...
  </interceptors>
+
  &lt;/interceptors&gt;
 
   
 
   
  <interceptor-stack name="defaultStack">
+
  &lt;interceptor-stack name="defaultStack"&gt;
     <interceptor-ref name="exception"/>
+
     &lt;interceptor-ref name="exception"/&gt;
     <interceptor-ref name="alias"/>
+
     &lt;interceptor-ref name="alias"/&gt;
     <interceptor-ref name="servlet-config"/>
+
     &lt;interceptor-ref name="servlet-config"/&gt;
     <interceptor-ref name="prepare"/>
+
     &lt;interceptor-ref name="prepare"/&gt;
     <interceptor-ref name="i18n"/>
+
     &lt;interceptor-ref name="i18n"/&gt;
     <interceptor-ref name="chain"/>
+
     &lt;interceptor-ref name="chain"/&gt;
     <interceptor-ref name="debugging"/>
+
     &lt;interceptor-ref name="debugging"/&gt;
     <interceptor-ref name="profiling"/>
+
     &lt;interceptor-ref name="profiling"/&gt;
     <interceptor-ref name="scoped-model-driven"/>
+
     &lt;interceptor-ref name="scoped-model-driven"/&gt;
     <interceptor-ref name="model-driven"/>
+
     &lt;interceptor-ref name="model-driven"/&gt;
     <interceptor-ref name="fileUpload"/>
+
     &lt;interceptor-ref name="fileUpload"/&gt;
     <interceptor-ref name="checkbox"/>
+
     &lt;interceptor-ref name="checkbox"/&gt;
     <interceptor-ref name="static-params"/>
+
     &lt;interceptor-ref name="static-params"/&gt;
     <interceptor-ref name="params"/>
+
     &lt;interceptor-ref name="params"/&gt;
     <interceptor-ref name="conversionError"/>
+
     &lt;interceptor-ref name="conversionError"/&gt;
     <interceptor-ref name="validation">
+
     &lt;interceptor-ref name="validation"&gt;
         <param name="excludeMethods">input,back,cancel,browse</param>
+
         &lt;param name="excludeMethods"&gt;input,back,cancel,browse&lt;/param&gt;
     </interceptor-ref>
+
     &lt;/interceptor-ref&gt;
     <interceptor-ref name="workflow">
+
     &lt;interceptor-ref name="workflow"&gt;
         <param name="excludeMethods">input,back,cancel,browse</param>
+
         &lt;param name="excludeMethods"&gt;input,back,cancel,browse&lt;/param&gt;
     </interceptor-ref>
+
     &lt;/interceptor-ref&gt;
  </interceptor-stack>
+
  &lt;/interceptor-stack&gt;
 
  ...
 
  ...
  
Exceptionマッピングは、例外とResultsをマッピングするだけで利用できます。フレームワークはExceptionマッピングの宣言<exception-mapping/>に、グローバルに利用するか、特定のアクションマッピングで使用するかの2つの方法を提供します。Exceptionマッピング要素は、exception と result の2つの属性を取ります。   
+
Exceptionマッピングは、例外とResultsをマッピングするだけで利用できます。フレームワークはExceptionマッピングの宣言&lt;exception-mapping/&gt;に、グローバルに利用するか、特定のアクションマッピングで使用するかの2つの方法を提供します。Exceptionマッピング要素は、exception と result の2つの属性を取ります。   
  
 
Exceptionマッピングを宣言すると、Interceptorは、送出された例外と、宣言された例外との継承関係の間で、最も近いクラスを見つけます。
 
Exceptionマッピングを宣言すると、Interceptorは、送出された例外と、宣言された例外との継承関係の間で、最も近いクラスを見つけます。
51行目: 51行目:
 
以下は、Excetionマッピングの、ローカルおよびグローバルの例
 
以下は、Excetionマッピングの、ローカルおよびグローバルの例
 
'''struts.xmlでの例'''
 
'''struts.xmlでの例'''
  <struts>
+
  &lt;struts&gt;
     <package name="default">
+
     &lt;package name="default"&gt;
 
         ...
 
         ...
         <global-results>
+
         &lt;global-results&gt;
             <result name="login" type="redirect">/Login.action</result>
+
             &lt;result name="login" type="redirect"&gt;/Login.action&lt;/result&gt;
             <result name="Exception">/Exception.jsp</result>
+
             &lt;result name="Exception"&gt;/Exception.jsp&lt;/result&gt;
         </global-results>
+
         &lt;/global-results&gt;
 
   
 
   
         <global-exception-mappings>
+
         &lt;global-exception-mappings&gt;
             <exception-mapping exception="java.sql.SQLException" result="SQLException"/>
+
             &lt;exception-mapping exception="java.sql.SQLException" result="SQLException"/&gt;
             <exception-mapping exception="java.lang.Exception" result="Exception"/>
+
             &lt;exception-mapping exception="java.lang.Exception" result="Exception"/&gt;
         </global-exception-mappings>
+
         &lt;/global-exception-mappings&gt;
 
         ...
 
         ...
         <action name="DataAccess" class="com.company.DataAccess">
+
         &lt;action name="DataAccess" class="com.company.DataAccess"&gt;
             <exception-mapping exception="com.company.SecurityException" result="login"/>
+
             &lt;exception-mapping exception="com.company.SecurityException" result="login"/&gt;
             <result name="SQLException" type="chain">SQLExceptionAction</result>
+
             &lt;result name="SQLException" type="chain"&gt;SQLExceptionAction&lt;/result&gt;
             <result>/DataAccess.jsp</result>
+
             &lt;result&gt;/DataAccess.jsp&lt;/result&gt;
         </action>
+
         &lt;/action&gt;
 
         ...
 
         ...
     </package>
+
     &lt;/package&gt;
  </xwork>
+
  &lt;/xwork&gt;
  
 
----
 
----
 
{{include_html banner_html, "!Struts"}}
 
{{include_html banner_html, "!Struts"}}

2020年2月15日 (土) 08:06時点における版

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"