Struts2的宣告式異常處理
在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你OUT啦!struts2支援宣告式異常處理,可以再Action中直接丟擲異常而交給struts2來處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如果能在xml中配置全域性異常,將會使得開發便捷性大大提高。
以前的異常捕獲可能是這樣的:
/**
*
執行更新
*
*
@return
*/
public String
update() {
Article
article = new Article();
article.setContent(content); article.setTitle(title);
article.setId(id);
try {
articleService.update(article);
return SUCCESS;
}
catch (SQLException
e) {
e.printStackTrace();
return ERROR;
}
catch (InvalidInputException
e) {
e.printStackTrace();
System.out.println( "輸入非法" );
return ERROR;
}
}
|
這種方式是完全的手動處理異常,一來不夠簡潔明快,而且還不容易維護,畢竟如果修改了這些程式碼都需要再次編譯。
採用struts2的宣告式異常處理就會簡單很多了。
首先,上面的程式碼的try catch 就可以全都不要了,但是,當然,得新加throw語句丟擲異常:
/**
*
執行更新
*
*
@return
*
@throws InvalidInputException
*
@throws SQLException
*/
public String
update() throws SQLException,
InvalidInputException {
Article
article = new Article();
article.setContent(content); article.setTitle(title);
article.setId(id);
articleService.update(article);
return SUCCESS;
}
|
程式碼清晰了很多,不是麼?
捕獲異常的任務則交給xml配置檔案了,配置檔案還是比較容易理解的:
<package name="wow" extends="struts-default">
<global-results>
<result name="sql">/internal_Error.jsp</result>
<result name="invalidinput">/invalid_Input.jsp</result>
<result name="naming">/internal_Error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
<exception-mapping result="invalidinput"
exception="cn.codeplus.exception.InvalidInputException"></exception-mapping>
<exception-mapping result="naming"
exception="javax.naming.NamingException"></exception-mapping>
</global-exception-mappings>
<action name="*_*" class="cn.codeplus.action.{2}Action" method="{1}">
<result name="success">/{1}_{2}_success.jsp</result>
<result name="error">/{1}_{2}_error.jsp</result>
<!--<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>-->
</action>
</package>
用於異常處理的<exception-mapping>標籤可以配置在Action中,也可以配置在<global-exception-mappings>,顧名思義<global-exception-mappings>就是全域性異常,當然執行Action的時候發生異常時,如果在Action中沒有捕獲異常而是丟擲異常的話,struts2會首先在正在執行的Action中查詢<exception-mapping>,尋找對應的Exception進行處理,如果找不到,才會去<global-exception-mappings>去尋找對應的Exception處理,如果還是找不到的話,就只好丟擲異常了。
下面說說異常處理:
<exception-mapping result="sql" exception="java.sql.SQLException"></exception-mapping>
上面程式碼說明,當捕獲java.sql.SQLException時候,去尋找對應的result為sql的檢視返回,即<global-result>中name為sql的result去返回internal_Error.jsp。當然如果<exception-mapping>配置在action中的話,則會首先去action的result搜尋返回檢視,失敗了才會去搜尋<global-result>。
在我們編寫上面的xml配置的時候可能會遇到如下錯誤:
這個是因為,我們xml配置檔案各個標籤<action>、<global-result>、<global-exception-mapping>的順序不對,調整一下標籤的順序,符合黃色的提示語即可。
最後,我們說說檢視層怎樣獲取異常資訊,invalid_Input.jsp檔案是這樣的:
...
<%@taglib prefix="s" uri="/struts-tags"%>
...
<body>
<jsp:include page="nav.jsp"></jsp:include>
<div>
抱歉,伺服器內部錯誤。
</div>
<div>
<s:property value="exception.message"/>
</div>
<s:debug></s:debug>
</body>
...
<s:property value="exception.message"/>表示從valuestack中獲取錯誤資訊,顯示在前臺頁面上。當然,我們也可以選擇更人性化得處理方案,比如說,放個失望的表情,寫上“抱歉,伺服器內部錯誤,您可以發郵件給我們提示此錯誤,[email protected]”等等;
經測試,當發生SQLException的時候,頁面資訊如下:
相關推薦
Struts2宣告式異常處理
在使用框架之前我們的程式中遇到異常,都是使用try{…}catch{…}手動捕獲解決,或者使用throws Exception將異常拋給別人去解決。在struts2框架中,異常的解決方法,更方便了,只要在struts.xml配置檔案中宣告一下就可以了。今天我們就來學習一下s
Struts2的宣告式異常處理
在struts2應用程式中你還在使用try catch語句來捕獲異常麼?如果是這樣的,那你OUT啦!struts2支援宣告式異常處理,可以再Action中直接丟擲異常而交給struts2來處理,當然需要我們在xml檔案中配置,由於丟擲同樣的異常的處理方法通常都一樣,所以如
【Struts2框架】第五節宣告式異常處理-處理異常的過程
如何抓到異常的? 步驟:(以之前寫的小樣例為例) 如果CategoryService中的list方法出錯(category_表不存在):public List<Category> list()throws SQLException{ Connection c
Struts2 學習筆記10--宣告式異常處理
宣告式異常處理 在程式中出現異常可以儘管往外拋,由統一介面做頁面處理 程式碼: 服務層:丟擲異常 public List<Category> list() throws SQLException { Connection conn = DB.
Struts2聲明式異常處理
.com ping lob exce src 方式 技術 異常信息 -s 通過配置.xml文件的方式處理異常信息: 註意:配置.xml文件的同時還要拋出異常 標簽:<exception-mapping></exception-mapping>和<
Struts2中的異常處理
因為在Action的execute方法宣告時就丟擲了Exception異常,所以我們無需再execute方法中捕捉異常,僅需在struts.xml 中配置異常處理。 為了使用Struts2的異常處理機制,必須開啟Struts2的異常對映功能,這需要excepti
struts2宣告式驗證 field-validator 的 type 屬性有哪些取值, 代表什麼含義
<validators> <field name="user.userName"> <!-- 驗證字串不能為空 --> <field-validator type="requiredstring"> <!-- 去
【Struts2】(11)異常處理和標籤
private List myList1; private List myList2; private List myList3; public List getMyList1() { return myList1; } public List getMyList2() { retur
Python基礎知識進階(五---2)----程序基本結構、簡單分支、異常處理、三大實例分析、基本循環結構、通用循環構造方法、死循環嵌套循環、布爾表達式
方法 算法 嵌套 構造方法 決策樹 輸入 繼續 實例 控制 上一篇隨筆寫的內容有點多了,決定分成兩節,不然自己看的時候也頭疼。 三者最大實例: 分支結構可以改變程序的控制流,算法不再是單調的一步步順序執行。 假設:以找出三個數字中最大者的程序設計為例。
(十)struts2的異常處理機制
原理 login 重寫 ... implement set 聲明式 nbsp con 成熟的MVC框架應該提供成熟的異常處理機制。當然可以在方法中手動捕捉異常,當捕捉到特定異常時,返回特定邏輯視圖名。 這種方式非常繁瑣,需要在方法中寫大量try catch塊,最大的缺點還是
java 異常處理之宣告丟擲異常
java 異常處理宣告丟擲異常 2.宣告丟擲異常是Java中處理異常的第二種方式 2.宣告丟擲異常是Java中處理異常的第二種方式 如果一個方法(中的語句執行時)可能生成某種異常,但是並不能確定如何處理這種異常,則此方
struts2的java lang NoSuchMethodException異常處理
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
Struts2 (3) 異常處理
說到在Struts框架中的異常處理,很多人想到的應該是在Action中使用try catch語句,然後再在配置檔案中進行進一步的處理 但是!這也 太low了吧,Struts其實有提供了更加酷和使用的異常處理方法,宣告式異常捕捉,這種方式是在Action的帶有 throws E
Oracle中游標詳細用法 隱式遊標 顯式遊標 異常處理 錯誤處理
oracle中游標詳細用法 轉自:http://blog.csdn.net/liyong199012/article/details/8948952 遊標的概念: 遊標是SQL的一個記憶體工作區,由系統或使用者以變數的形式定義。遊
關於如何自定義Struts2表單驗證後的錯誤資訊顯示格式【基於宣告式驗證】
網上關於很多通過修改template主題為simple達到最後的效果,但是多數是直接通過硬編碼的方式去驗證【即程式設計式驗證】,這裡就自己是怎麼通過宣告式驗證去達到格式優化的效果的,可能程式碼比較low,希望大家見諒。 首先是動作類以及登陸的jsp頁面:【StudentAc
【C#】氣泡排序、隱式和顯式轉換、函式及異常處理
一、普通氣泡排序: C#中常見的排序方法有:氣泡排序,快速排序,插入排序,選擇排序、堆排序以及歸併排序。雖然還沒學習過,但是也有耳聞,就先把它們先歸類。今天主要講這裡面最常見的氣泡排序。 【概念】 氣泡排序也就是講一組需要排序的數,進行從小到大,或從大到小的排列。計算機
spring 宣告式事務配置,丟擲runtimeException異常不回滾
預設spring只在發生未被捕獲的runtimeexcetpion時才回滾。 最容易解決的辦法:程式碼級控制:TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); try{ ..
c++異常處理,異常宣告,捕獲異常
C++ 捕獲異常的一些規則: 1. 非MFC 的c++ 異常應該用過引用來捕獲。使用引用來捕獲異常不需要刪除c++ 異常物件。因為使用引用捕獲的異常物件會在棧中傳遞。而且保持了多型性,使得你捕獲的異常正是你丟擲的異常物件。使用指標捕獲異常的話,需要你刪除異常
spring 宣告式事務傳播特性詳解(包括異常回滾舉例)
1:Service介面實現 public interface IProcessBusiService { //事務1@Transactional(readOnly = false, propagation = Propagation.REQUIRES_NEW
struts2之宣告式驗證
struts2框架中提供大量的內建校驗器,使用時只需對這些校驗進行配置,我們管這種方式叫做宣告驗證。其實這個流程和之前介紹的程式設計驗證是一樣的,可以參考之前輸入驗證的流程。 一.編寫配置檔案:檔名為ActionClassName-validation.xml,與要驗證屬性