Struts 2的異常處理
對于MVC框架而言。我們希望:當Action處理用戶請求時。如果出現了異常1,則系統就會轉入視圖資源1,在該視圖資源上輸入服務器提示;如果出現了異常2,則系統會轉入子圖資源2,在該視圖資源上輸入服務器提示;。。。。。</span> 為了滿足上述要求,我們可以采用以下的處理方法:
Public class XxxxAction{
Public String execute(){
try{
…….
}
catch(異常1 e1){
return 結果1;
}
Catch(異常2 e2){
return 結果2;
}
}
}我們在Action的execute方法中使用try…..catch快來捕捉異常,當捕捉到指定的異常時,系統會返回對應的邏輯視圖名----這種處理方式完全是手動處理異常,可維護性不好。
從上面我們可以看到,上面代碼段的實質是完成異常類型和邏輯視圖名之間的對應關系。既然如此,我們為什么不可以把這種對應關系推遲到struts.xml中進行管理呢??
由于struts2支持聲明式異常處理,所以我們只需要將所有的異常全部拋出,交給struts2來處理。然后根據struts.xml文件中配置的異常映射,轉入到制定的視圖資源。
聲明式異常捕捉
Struts 2 的異常機制是通過在struts.xml文件中配置<exception-mapping..../>元素來實現的。配置該元素時需要指定兩個屬性:
exception:指定該異常映射所設置的異常類型
result:指定Actin出現異常時,返回的邏輯視圖名
異常映射一般可以分為全局異常映射和局部異常映射
全局異常映射對所有的Action都有效,而局部異常映射僅僅只對該異常映射所在的Action內有效。
全局異常映射是將<exception-mapping...>元素作為<action .../>元素的子元素配置
全局異常映射是將<exception-mapping...>元素作為<global-exception-mapping.../>元素的子元素配置
輸出異常信息
當Struts 2系統進入異常處理頁面后,我們必須在對應的頁面中輸出指定異常信息
可以通過以下標簽來輸出異常信息
<.s:property value="exception"/>:輸出異常對象本身
<s:propertu value="exceptionStack"/>:輸出異常堆棧信息
對于第一種我們可以使用表達式輸出異常對象本身。對于第二種,由于exception提供了getMessage()方法,所以我們可以采用<s:propertu value="exception.messagge"/>來輸出異常的message信息
讀李剛《輕量級Java EE企業應用實戰》