Struts 2における異常処理メカニズムの分析


アクションのexecuteメソッド宣言の時にExceptionの異常を投げましたので、私達は更にexecute方法で異常を捕捉する必要はありません。struts.xmlに異常処理を配置するだけでいいです。
Struts 2の異常処理機構を使用するためには、Struts 2の異常マッピング機能を開く必要があり、これはexceptionブロックが必要である。struts-default.xmlファイルですでにexceptionブロックがオープンしました。
宣言式異常捕捉
Struts 2の異常処理メカニズムは、struts.xmlファイルに<exception-mapping…>要素を配置することにより、この要素を構成する場合、2つの属性を指定する必要があります。
exception:この異常タイプの完全限定名を指定します。
result:論理ビュー名を指定します。
<exception-mapping…./>元素の出現位置によって、異常マッピングはまた二つに分けられます。
局所異常マッピング:「exception-mapping.../」要素を「action.../」要素のサブ要素として構成する。
グローバル異常マッピング:<exception-mapping…/>要素を<global-exception-mappings.../>要素のサブ要素として構成する。
グローバル異常マッピングはすべてのアクションに対して有効であるが、ローカル異常マッピングはこの異常マッピングがあるアクションにのみ有効である。
局所異常マッピングとグローバル異常マッピングが同一の異常タイプを構成している場合、<action.../>要素内の局所異常マッピングはグローバル異常マッピングをカバーします。

Struts.xml
 <package name="ssh2" extends="struts-default">
   <global-results>
      <result name="sql">/exception.jsp</result>
      <result name="root">/exception.jsp</result>
   </global-results>
   <global-exception-mappings>
      <exception-mapping exception="java.sql.SQLException" result="sql"/>
      <exception-mapping exception="java.lang.Exception" result="root"/>
   </global-exception-mappings>
   <action name="login" class="loginAction">
     <result>/welcome.jsp</result>
     <result name="nullPointer">/nullPointer.jsp</result>
     <exception-mapping exception="java.lang.NullPointerException" result="nullPointer"/>
   </action>
 </package>

Action
  public class loginAction extends ActionSupport
  {
    public String add() throws SQLException
    {
       return "toadd";
    }
  }
異常があったら外に投げたらいいです。あなたも方法の中で投げられます。例えば、throw SQLException。
Struts 2のラベルを使って異常情報を出力できます。
異常なメッセージ属性情報を出力します。
異常スタック情報を出力します。
処理システムの異常の基礎ができました。カスタマイズの異常を見てみます。

package com.exception ;
public class MyException extends Exception 
{
  private String message;
  public MyException(String message)
  {
      super(message);
      this.message = message ;
  }
  public String getMessage() {
     return message;
  }
  public void setMessage(String message) {
      this.message = message;
  }
}
public String execute() throws Exception
{
  if(!"hello".equals(usename) || !"world".equals(password))
  {
       throw new MyException("        ,     !");
  }
  return "success" ;
}
action設定における異常処理

<struts>
  <package name="struts2" extends="struts-default">    
   <action name="login" class="com.struts2.LoginAction">
      <exception-mapping result="myex" exception="com.exception.MyException">     
      </exception-mapping>
      <result name="myex">/error.jsp</result>
      <result name="success">/result.jsp</result>
   </action>
  </package> 
</struts>
           
<struts>
  <package name="struts2" extends="struts-default">
   <global-results>
     <result name="myexception1">/error.jsp</result>
   </global-results>
   <global-exception-mappings>
     <exception-mapping result="myexception1"
        exception="com.exception.MyException">      
     </exception-mapping>
   </global-exception-mappings>
   <action name="login" class="com.struts2.LoginAction">
      <result name="success">/result.jsp</result>
   </action>
  </package>
</struts>
エラーページerror.jsp

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%> 
<html>
 <body>
  <!--   exception   exception="com.exception.MyException" -->
  <s:property value="exception.message"/>
 </body>
</html>
締め括りをつける
ローカル異常処理は、グローバル異常処理よりも高く、グローバル異常処理をカバーすることができ、グローバル異常マッピングを定義すると、すべてのアクションに有効になり、逆にローカル異常マッピングを定義すると、現在のアクションに有効になります。
グローバルエリアとローカルエリアで同じ異常マップが定義されている場合、まずローカル異常エリアに行って、その結果ページを探します。見つかったら、エラー結果ページに直接ジャンプします。グローバルに同じ結果があるかどうかに関わらず、部分的に上書きされます。もし部分的には見つけられなかったら、グローバルエリアに探しに行きます。
皆さんのためになりたいです。興味のある友達はstruts 2開発プロセスと詳細配置を参照してください。 、 Struts 2ダイナミック方法の起動について詳しく説明します。など、問題があったらメッセージを残してください。