Struts2的宣告式異常處理

2021-09-02 02:51:52 字數 3835 閱讀 6661

在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你out啦!struts2支援宣告式異常處理,可以再action中直接丟擲異常而交給struts2來處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如果能在xml中配置全域性異常,將會使得開發便捷性大大提高。

以前的異常捕獲可能是這樣的:?

/**

* 執行更新

*

* @return

*/

publicstring update()catch(sqlexception e)catch(invalidinputexception e)

}

這種方式是完全的手動處理異常,一來不夠簡潔明快,而且還不容易維護,畢竟如果修改了這些**都需要再次編譯。

採用struts2的宣告式異常處理就會簡單很多了。

首先,上面的**的try catch 就可以全都不要了,但是,當然,得新加throw語句丟擲異常:?

/**

* 執行更新

*

* @return

* @throws invalidinputexception

* @throws sqlexception

*/

publicstring update()throwssqlexception, invalidinputexception

**清晰了很多,不是麼?

捕獲異常的任務則交給xml配置檔案了,配置檔案還是比較容易理解的:

/internal_error.jsp

/invalid_input.jsp

/internal_error.jsp

/__success.jsp

/__error.jsp

在我們編寫上面的xml配置的時候可能會遇到如下錯誤:

... 抱歉,伺服器內部錯誤。

...

表示從valuestack中獲取錯誤資訊,顯示在前台頁面上。當然,我們也可以選擇更人性化得處理方案,比如說,放個失望的表情,寫上「抱歉,伺服器內部錯誤,您可以發郵件給我們提示此錯誤,***x@***x.com」等等;
經測試,當發生sqlexception的時候,頁面資訊如下:

struts2的異常處理機制:任何成熟的mvc框架都應該提供成就的異常處理機制。strut2也不例外。struts2提供了一種宣告式的異常處理方式。struts2也是通過配置的***來實現異常處理機制的。

exception:此屬性指定該異常對映所設定的異常型別。

result:此屬性指定action出現該異常時,系統轉入result屬性所指向的結果。

異常對映也分為兩種:

輸出異常資訊:

使用struts2的標籤來輸出異常資訊:

﹤s:property value="exception.message"/﹥:輸出異常物件本身。

﹤s:property value="exceptionstack"/﹥: 輸出異常堆疊資訊。

利用struts2的異常處理機制和***機制可以很方便的實現異常處理功能,你不再需要在action中捕獲異常,並丟擲相關的異常了,這些都交給***來幫你做了。

1.  在 struts.xml 檔案中,宣告全域性異常對映,以及對應的全域性異常**如下所示:

﹤global-results﹥

﹤result name="error"﹥/admin/error/errdisplay.ftl﹤/result﹥

﹤/global-results﹥

busines***ception  是異常處理類,**如下所示:

public class busines***ception extends runtimeexception

public busines***ception(throwable throwable)

public busines***ception(throwable throwable, string frdmessage)

private static string createfriendlyerrmsg(string msgbody)

}2.  /admin/error/errdisplay.ftl 頁面

這個頁面很簡單:

﹤body﹥

﹤h2﹥

出現異常啦

﹤/h2﹥

﹤hr/﹥

﹤h3 style="color:red"﹥

﹤!-- 獲得異常物件 --﹥

$﹤/h3﹥

﹤br/﹥

﹤!-- 異常堆疊資訊(開發人員用) --﹥

﹤div style="display:none;"﹥

$﹤/div﹥

﹤/body﹥

﹤body﹥

﹤h2﹥

出現異常啦

﹤/h2﹥

﹤hr/﹥

﹤h3 style="color:red"﹥

﹤!-- 獲得異常物件 --﹥

$﹤/h3﹥

﹤br/﹥

﹤!-- 異常堆疊資訊(開發人員用) --﹥

﹤div style="display:none;"﹥

$﹤/div﹥

﹤/body﹥

public string intercept(actioninvocation invocation) throws exception

catch(dataacces***ception ex)catch(nullpointerexception ex)catch(ioexception ex)catch(classnotfoundexception ex)catch(arithmeticexception ex)catch(arrayindexoutofbound***ception ex)catch(illegalargumentexception ex)catch(classcastexception ex)catch(securityexception ex)catch(sqlexception ex)catch(nosuchmethoderror ex)catch(internalerror ex)catch(exception ex)

after(invocation, result);

return result;

}struts2做異常處理還是比較方便的了。

Struts2的宣告式異常處理

在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你out啦!struts2支援宣告式異常處理,可以再action中直接丟擲異常而交給struts2來處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如果能在xml中配置全域性異常...

Struts2的宣告式異常處理

在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你out啦!struts2支援宣告式異常處理,可以再action中直接丟擲異常而交給struts2來處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如果能在xml中配置全域性異常...

Struts2的宣告式異常處理

在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你out啦!struts2支援宣告式異常處理,可以再action中直接丟擲異常而交給struts2來 處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如果能在xml中配置全域性異...