springMVC異常處理器:自定義異常處理器捕獲系統異常,控制異常頁面跳轉

首先看一個異常頁面
在這裏插入圖片描述404/500可能是大家最熟悉的兩個錯誤代碼,在傳統方式下,代碼遇到類如1/0這樣的異常時,我們可以用try-catch捕獲,交給前端控制器處理,如果前端控制器沒有規範好異常處理器來處理這些異常,則會交由瀏覽器處理,也就出現了上圖所看到的那樣。
這個頁面對於開發人員也還好,一眼就能看到問題出哪兒了。可是,對於操作人員而言,則顯得不是那麼友好了。
所以,可以定義一個異常處理器,分門別類的把多方面的異常進行補貨,跳轉到對應的錯誤信息頁面,同時可以提示操作者一些錯誤信息。

下面,我們模擬一個查詢所有用戶的請求,在控制器中加入1/0這樣一段錯誤代碼,讓程序進行異常處理。

  1. 自定義個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;
    }
}
  1. 實現HandlerExceptionResolver接口,自定義異常處理器。
    參數中的Exception e爲我們代碼中補貨到的異常;如果有多個類似SystemException這樣的異常,我們需要多個判斷語句;ModelAndViewsetViewName方法指定返回頁面,視圖解析器會自動拼接前綴後綴指向實際的頁面地址。
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;
    }
}
  1. 配置異常處理器
    在springmvc.xml中配置異常處理器。
<bean id="systemExceptionHandler" class="com.wuwl.exception.handler.SystemExceptionHandler"></bean>
  1. 編寫Controller控制器
    @RequestMapping("getAll")
    public String getAll() throws SystemException {
    try {
        int i = 1 / 0;
        return "user/userList";
    }catch (Exception e){
        throw new SystemException("查詢用戶信息是出現異常:"+ e.getMessage());
    }


    }
  1. 編寫錯誤頁面
    這裏整的比較簡單,美工可以後續優化;這裏需要注意的是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>

  1. 測試
    點擊獲取用戶列表的連接後,在控制器中捕獲異常,交給異常處理器,異常處理器轉向錯誤信息界面,並反饋錯誤信息。
    在這裏插入圖片描述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章