Struts可以以兩種不同方式來處理Action類中execute()方法産生的異常:
1、配置方式:通過設定Struts配置檔案(struts-config.xml)中的exception元素來處理異常。
2、程式設計方式:在Action中捕獲異常,并把異常重新包裝成ActionMessage對象,然後把ActionMessage對象儲存在ActionMessages對象中,接着把請求轉發給錯誤處理頁面即可。
以配置方式處理異常可以提高應用的靈活性、可重用性和可維護性,下面介紹如何以配置方式來處理異常:
1、首先在<global-exception>(全局異常)或<action>(局部異常)元素中嵌套<exception>元素,一個<exception>元素代表一種類别的異常,其格式如下:
<exception type="type" handler="handler" path="path" key="key" bundle="bundle" scope="scope"/>
type:指定待處理的異常類。
handler:指定異常處理類,預設值為org.apache.struts.action.ExceptionHandler。如果設定為使用者自定義的異常處理類,則該類必須繼承ExceptionHandler。
path:指定轉發路徑。
key:指定錯誤消息的key,Struts架構将根據這個key到Resource Bundle中尋找比對的消息文本。
bundle:指定Resource Bundle,如果沒有設定此項,将使用預設的Resource Bundle。
scope:指定ActionMessages的存放範圍,可選值包括request和session。預設值為request。
在指定了所有的異常後,可以加一個<exception type="java.lang.Exception" .../>來捕獲尚未指定的其它異常,并可以指定該key的值為"系統錯誤......"。
例如:
struts-config.xml 檔案
...
<exception type="com.cjcoder.MyException" key="action.errors.myexception" path="/error.jsp"/>
<exception type="java.lang.Exception" key="action.errors.exception" path="/error.jsp"/>
...
error.jsp 檔案
...
<html:errors property="action.errors.myexception"/>
<html:errors property="action.errors.exception"/>
...
2、在path指定的頁面中,通過<html:errors/>來顯示所有異常資訊或通過<html:errors property="key"/>來顯示指定異常資訊(property屬性的值和<exception>元素中指定的key相對應)。
推薦方式
直接在背景try{
....處理邏輯
}catch(Exception e){
//通過請求抛回前端頁面用EL表達式取值,Key值保持一緻
request.setAttribute("message","聯機處理異常,"+e.getMessage());
}
<html>
<body>
<c:if test="${!empty message}">
<font color='red'>錯誤資訊:${message}</font>
</c:if>
</body>
</html>