程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> JAVA編程入門知識 >> struts1.1中的異常應用實踐

struts1.1中的異常應用實踐

編輯:JAVA編程入門知識

  struts的異常處理機制帶我們很大的方便。通過思考和自己作例子,覺得以下這種方式較為靈活:

      首先為你的應用程序定制一套異常類。例如,先定義一個基類(可以是虛類),注重,在此它擴展自RuntimeException,這是為了在struts的action中順利捕捉到。

  
  public class BaseException extends RuntimeException {...}

  下來你可以定義幾個子類,例如:Dao異常,事務處理異常,service異常等。在spring中,包
  org.springframework.dao下定義了一套Dao異常,值得大家學習一下。

  接著,在struts-cofig.XML文件中定義全局異常如下,此處的key屬性我已經不預備用了:
      <global-exceptions>
          <exception key="todo" type="org.chage.exception.BaseException"        handler="org.chage.exception.MyExceptionHandler" />
      </global-exceptions>

     
  下面看一下我的處理異常的類:
     
  package org.chage.exception;
  import org.apache.struts.action.ExceptionHandler;
  import ...  
  public class MyExceptionHandler  extends ExceptionHandler {

   public ActionForward execute(
     Exception exception,
     ExceptionConfig config,
     ActionMapping mapping,
     ActionForm form,
     HttpServletRequest request,
     HttpServletResponse response)
    throws ServletException
   {      
      request.setAttribute("exception", exception);
      //返回原始請求的Forward,當然你也可以定義一個全局異常ForWord,都轉向它
      return mapping.getInputForward();
   }
  }
  

  在頁面上(此頁面我們設置為請求action,即發生異常的action的input屬性),我們顯示錯誤信息時可以使用struts標簽如下,注重,這裡顯示的信息和資源屬性文件無關,是你自己拋出的:

  <logic:present name="exception">
     <bean:write name="exception"/>
  </logic:present>

  這樣作的好處在哪裡呢?我們來看一下,一般我們的思路是,發生了邏輯錯誤,比如說,用戶名輸重復,或者預備修改的數據已被他人刪除等,我們要捕捉它並顯示給用戶,第一感是在action中作的,例如:
  try{
     //do something logic method...
  }catch (XXXException e){
    ActionErrors errors= new ActionErrors();
    ActionError error=new ActionError("error.missing.username");
    errors.add("error.xxx",error);
    saveErrors(request,errors);
    return mapping.findForward("errorPage");
  }

   
  設計良好的action應該僅僅是web層的一個“路標指引器”,真正的邏輯方法是調用其他的業務bean來完成的,簡單地說,通常認為action中的代碼越少越好.假如采用了上面那種全局異常處理機制,action此時就可以不用管邏輯異常了,由業務bean負責拋出就可以了,大家就可以少寫一些action中的try  catch 語塊了,也可以繞開ActionError,思路上是不是更清楚?異常在真正發生的類中被拋出,然後向上傳遞,一直傳到action中,struts負責捕捉之,當然這裡的異常你必須已經定義過了。

  注:
  1. 假如你不想寫 MyExceptionHandler 類,當然struts-config.xml中的handler=屬性也要去掉,還有一種辦法可以顯示錯誤信息在 jsp頁上,先引用jstl標簽庫,然後如下:

  <c:out value="${requestScope['org.apache.struts.action.EXCEPTION'].message}"/>

  
  
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved