(十)struts2的異常處理機制
阿新 • • 發佈:2018-08-09
原理 login 重寫 ... implement set 聲明式 nbsp con
成熟的MVC框架應該提供成熟的異常處理機制。當然可以在方法中手動捕捉異常,當捕捉到特定異常時,返回特定邏輯視圖名。
這種方式非常繁瑣,需要在方法中寫大量try catch塊,最大的缺點還是一旦需要改變異常處理方法時,需要修改代碼。
最好的方式是通過聲明式的方式管理異常處理。struts2提供了一種聲明式的異常處理方式。
一、原理
我們看Action接口中的execute方法聲明。 public String execute() throws Exception 這就意味著我們重寫該方法時,無需進行任何異常處理,而是把異常拋給struts2框架處理. struts2框架接收到Action拋出的異常後,根據struts.xml文件配置的異常映射,轉入指定的視圖資源。 異常映射功能是由 exception的攔截器幫我們做的。 struts2的異常處理機制是通過在struts.xml中配置<exception-mapping..../>元素完成。 屬性: exception:異常類型 result:出現該異常時,系統轉入result指定的結果
二、局部異常映射和全局異常映射
全局異常映射對所有的Action都有效,但局部異常映射只對該異常映射所在的Action有效。
局部異常映射:將<exception-mapping..../>元素作為<action.../>的子元素配置
如果全局異常映射和局部異常映射配置了同一個異常類型,在該Action內,局部覆蓋全局。
全局異常映射:將<exception-mapping..../>元素作為<global-exception-mappings>元素的子元素配置
三、異常處理案例
我們做一個簡單的登陸應用
(1)編寫我們的Action類
public class LoginAction implements Action{ private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public String execute()throws Exception{ //當用戶名為monster時,拋出我們的自定義異常 if(getUsername().equals("monster")){ throw new MyException("自定義異常"); } //當用戶名為sql時,拋出sql異常 if(getUsername().equalsIgnoreCase("sql")){ throw new SQLException("用戶名不能為sql"); } if(getUsername().equals("cad")&&getPassword().equals("123456")){ return "success"; }else { return "error"; } } }
(2)我們編寫我們的登陸jsp頁面
<body> <form action="${pageContext.request.contextPath }/login" method="post"> 用戶名:<input type="text" name="username"><br> 密 碼:<input type="password" name="password"><br> <input type="submit" value="提交"> </form> </body>
(3)我們編寫我們的配置文件struts.xml
<package name="p2" extends="struts-default"> //全局結果視圖定義 <global-results> <result name="sql">/exception.jsp</result> </global-results> //全局異常定義 <global-exception-mappings> //出現sql異常,就轉入到視圖名為sql的視圖結果 <exception-mapping result="sql" exception="java.sql.Exception"></exception-mapping> </global-exception-mappings> <action name="login" class="com.cad.struts2.LoginAction" > //局部異常定義 <exception-mapping result="my" exception="conm.cad.struts2.MyException"></exception-mapping> <result name="my">/exception.jsp</result> <result name="success">/welcome.jsp</result> <result name="error">/error.jsp</result> </action> </package>
(十)struts2的異常處理機制