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

首頁 > 學院 > 開發設計 > 正文

Struts異常機制(Exception Handling)

2019-11-18 12:54:31
字體:
來源:轉載
供稿:網友

  總的來說,在struts新的版本中加入了對異常的處理,稱之為:Exception Handling,標志著作為一個整體的解決框架,struts原來越趨于成熟。
  
  通常來說,以前在用struts開發的過程中,對于異常的處理,主要是采用手動處理的方式:如通過try/catch等等捕捉異常,然后定制個性化的比較具體的錯誤信息放進ActionError中,然后在具體的返回頁面中把這些錯誤信息反饋給用戶(包括開發員)。異常原始的信息不管是最終用戶還是開發員都是不希望看到的。
  
  下面著重講一下在struts中是如何通過配置文件來解決異常。
  
  Struts中的Exception Handleing不難,簡單高效是業內給其的一個比較好的評價。
  
  通過配置文件(主要是struts-config.xml)來定制異常處理,就象定義formbean一樣,定制異常也有兩種方法,姑且把它分為:“全局異常”和“局部異常”。
  
  全局異常,定義方法如下:
  
  ……
  
  ……
  
  <global-exceptions>
  
  <exception key="eXPired.InvalidItemsCatalogName"            type="com.  
  scope="request"
  
  path="error.jsp"/>
  
  </global-exceptions>
  
  ……
  
  ……
  
  上述代碼在struts-config.xml中定義了一個全局異常,它的作用是拋出InvalidiItemsCatalogNameException(本處的意思是當在添加商品分類的時候發現該類別已經存在)異常的時候返回到error.
jsp中,并且攜帶自定的比較規范的異常信息expired.InvalidItemsCatalogName,expired.InvalidItemsCatalogName可以在應用程序的資源配置文件中找到,如:
  
  expired.InvalidItemsCatalogName=你要添加的商品類別已經存在,請添加新的類別!
  
  局部異常,定義方法如下:
  
  ……
  
  ……
  
  <action-mappings>
  
  <action path=”/addItemsCatalogAction”
  
  type=”com.iplateau.jsop.action.ItemsCatalogAction”
  
  name=”itemsCatalogForm”>
  
  <exception key=” expired.InvalidItemsCatalogName”
  
  type=” com.iplateau.jshop.common.waf.exceptions.InvalidiItemsCatalogNameException”
  
  path=”/error.jsp”/>
  
  <forward name=”sUCcess” path=”***Layout(此處采用Tiles進行輔助開發)”/>
  
  </ation>
  
  </action-mappings>
  
  ……
  
  ……
  
  (關于Tiles的內容參看另一篇文章“Struts使用Tiles輔助開發”)
  
  下面我們把關注的目光放在具體action里,看看struts是如何進行異常處理的
  
  ItemsCatalogAction.java
  
  package com.iplateau.jshop.action.ItemsCatalogAction
  
  import com.iplateau.jshop.business.ItemsCatalogMap;
  
  import com.iplateau.jshop.action.ItemsCatalogForm;
  
  import ***;
  
  public class ItemsCatalogAction extends BaseAction {
  
  public ActionForward execute(
  
  ActionMapping mapping,
  
  ActionForm form,
  
  HttpServletRequest request,
  
  HttpServletResponse response)
  
  throws Exception {
  
  String flg=”error”;
  
  String act=request.getParameter(“act”);
  
  ItemsCatalogMap map=new ItemsCatalogMap();
  
  ItemsCatalogForm thisform=( ItemsCatalogForm)form;
  
  // ItemsCatalogMap為具體的處理商品類別的類
  
  If(act.equals(“create”)){
  
  map.validateNameOfCatalog(thisform);
  
  map.create(thisform);
  
  flg=”success”;
  
  return mapping.findForward(flg);
  
  }else{
  
  return mapping.findForward(flg);
  
  }
  
  }
  
  }
  
  上便是一個簡單的action,其中用act的具體內容來判定此時的action要處理的操作,如act為cteate的時候,處理的是商品類別的添加等等。
  
  看了上邊的代碼,可以了解,在調用具體的業務類進行添加商品類別以前先要判定此時要添加的商品類別的合法性,如:
  
  調用map.validateNameOfCatalog(thisform);
  
  其中在ItemsCatalogMap定義的validateNameOfCatalog方法拋出InvalidiItemsCatalogNameException。
  
  下面讓我們運行一下添加商品類別的例子,假如此時數據庫中已經存在“牛奶制品”這個商品類別,而我們又要添加此類別的時候,程序如我們預想的一樣轉到error.jsp并且顯示了我們要先是的錯誤信息:你要添加的商品類別已經存在,請添加新的類別!
  
  其實就這么簡單,我們的定制的異常在程序中并不需要用try/catch來捕捉,一旦出現了我們已經定義的異常那么就會轉到相應得頁面,并且攜帶定制的信息。
  
  還記得在struts先前的版本中我們的請求都是通過action的perform來處理,可是現在都要通過execute來處理,就其原因一個很重要的就是“成全”Exception Handling。為什么呢?
  
  因為perform在聲明的時候僅僅拋出IOException 和ServletException,這遠遠不能滿足Exception Handling的要求,那么讓我們看看execute是怎樣的:它籠統的拋出Exception(所有異常的父類)
  
  上面的闡述只是一個引子,而且默認struts的異常是通過org.apache.struts.action. ExceptionHandler來處理的,你可以定義自己的處理方式,只要繼續它并實現其中的execute方法,這個方法在ExceptionHandler的定義如下:
  
  public ActionForward execute(Exception ex,
  
  ExceptionConfig ae,
  
  ActionMapping mapping,
  
  ActionForm formInstance,
  
  HttpServletRequest request,
  
  HttpServletResponse response)
  
  throws ServletException
  
  具體而且專業的分析Exception Handling的內容,請參看《PRogramming Jakarta Struts》第10章——這本書的電子版網上很多地方可以下載。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 德庆县| 安塞县| 台南县| 竹北市| 文登市| 盐池县| 姜堰市| 大石桥市| 平定县| 柳州市| 澄城县| 邵阳市| 吉安市| 瑞安市| 历史| 随州市| 北安市| 呈贡县| 饶河县| 昂仁县| 兖州市| 和平区| 太康县| 青神县| 丰原市| 陕西省| 房山区| 咸丰县| 偃师市| 商河县| 涿州市| 剑川县| 平远县| 洞头县| 万宁市| 尉犁县| 台北市| 房产| 武乡县| 双江| 浪卡子县|