1. 程式人生 > >Struts2的宣告式異常處理

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,與要驗證屬性