首先看一個異常頁面
404/500可能是大家最熟悉的兩個錯誤代碼,在傳統方式下,代碼遇到類如1/0這樣的異常時,我們可以用try-catch捕獲,交給前端控制器處理,如果前端控制器沒有規範好異常處理器來處理這些異常,則會交由瀏覽器處理,也就出現了上圖所看到的那樣。
這個頁面對於開發人員也還好,一眼就能看到問題出哪兒了。可是,對於操作人員而言,則顯得不是那麼友好了。
所以,可以定義一個異常處理器,分門別類的把多方面的異常進行補貨,跳轉到對應的錯誤信息頁面,同時可以提示操作者一些錯誤信息。
下面,我們模擬一個查詢所有用戶的請求,在控制器中加入1/0
這樣一段錯誤代碼,讓程序進行異常處理。
- 自定義個Exception子類,提供有參構造。
public class SystemException extends Exception{
private String message;
@Override
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
public SystemException(String message) {
this.message = message;
}
}
- 實現HandlerExceptionResolver接口,自定義異常處理器。
參數中的Exception e
爲我們代碼中補貨到的異常;如果有多個類似SystemException
這樣的異常,我們需要多個判斷語句;ModelAndView
的setViewName
方法指定返回頁面,視圖解析器會自動拼接前綴後綴指向實際的頁面地址。
public class SystemExceptionHandler implements HandlerExceptionResolver {
@Override
public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
Exception ex;
ModelAndView mv;
if(e instanceof SystemException){
ex = (SystemException)e;
}else{
ex = new Exception("未知異常!");
}
mv = new ModelAndView();
mv.addObject("errorMsg",ex.getMessage());
mv.setViewName("error");
return mv;
}
}
- 配置異常處理器
在springmvc.xml中配置異常處理器。
<bean id="systemExceptionHandler" class="com.wuwl.exception.handler.SystemExceptionHandler"></bean>
- 編寫Controller控制器
@RequestMapping("getAll")
public String getAll() throws SystemException {
try {
int i = 1 / 0;
return "user/userList";
}catch (Exception e){
throw new SystemException("查詢用戶信息是出現異常:"+ e.getMessage());
}
}
- 編寫錯誤頁面
這裏整的比較簡單,美工可以後續優化;這裏需要注意的是isELIgnored="false"
屬性別丟。
<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<p>系統異常!</p>
<p>異常信息爲:${errorMsg}</p>
</body>
</html>
- 測試
點擊獲取用戶列表的連接後,在控制器中捕獲異常,交給異常處理器,異常處理器轉向錯誤信息界面,並反饋錯誤信息。