国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

struts1.1中的異常應(yīng)用實(shí)踐

2019-11-17 06:19:22
字體:
供稿:網(wǎng)友

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

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


public class BaseException extends RuntimeException {...}

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

接著,在struts-cofig.xml文件中定義全局異常如下,此處的key屬性我已經(jīng)不預(yù)備用了:
    <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,當(dāng)然你也可以定義一個全局異常ForWord,都轉(zhuǎn)向它
    return mapping.getInputForward();
 }
}
  

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

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

這樣作的好處在哪里呢?我們來看一下,一般我們的思路是,發(fā)生了邏輯錯誤,比如說,用戶名輸重復(fù),或者預(yù)備修改的數(shù)據(jù)已被他人刪除等,我們要捕捉它并顯示給用戶,第一感是在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");
}

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

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

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




發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 南充市| 富民县| 绥化市| 新竹市| 双鸭山市| 咸宁市| 阿拉善右旗| 丹阳市| 邵阳市| 库尔勒市| 迁安市| 厦门市| 灵川县| 大安市| 迁安市| 和田市| 福安市| 京山县| 丁青县| 玛多县| 芮城县| 通榆县| 泗洪县| 清水河县| 南召县| 武冈市| 苏尼特左旗| 绥滨县| 驻马店市| 忻城县| 高密市| 泾源县| 林西县| 彭水| 徐水县| 巩义市| 兖州市| 宜丰县| 门头沟区| 赤水市| 湄潭县|