Spring MVC(11)- 攔截器

1 攔截器

  • Spring MVC 的處理器攔截器類似於Servlet開發中的過濾器Filter,用於對處理器進行預處理和後處理。
  • 攔截器鏈(Interceptor Chain)。攔截器鏈就是將攔截器按一定的順序聯結成一條鏈。在訪問被攔截的方法或字段時,攔截器鏈中的攔截器就會按其之前定義的順序被調用。
  • 自定義攔截器, 要求必須實現:HandlerInterceptor接口。

1.1 攔截器和過濾器

  • 過濾器是servlet規範中的一部分,任何java web工程都可以使用。
  • 攔截器是SpringMVC框架自己的,只有使用了SpringMVC框架的工程才能用。
  • 過濾器在url-pattern中配置了/*之後,可以對所有要訪問的資源攔截。
  • 攔截器它是隻會攔截訪問的控制器方法,如果訪問的是jsp,html,css,image或者js是不會進行攔截的。

2 異常處理

在這裏插入圖片描述
在這裏插入圖片描述

2.1 自定義攔截器

在這裏插入圖片描述

  • 自定義異常類

在這裏插入圖片描述

package com.tzb.exception;

public class SysException extends Exception {

    private String message;

    public SysException(String message) {
        this.message = message;

    }

    @Override
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }
}


  • Controller
@Controller
@RequestMapping("/user")
public class UserController {

    @RequestMapping("/testException")
    public String testException() throws SysException {
        System.out.println("testException 執行了。。。。");

        try {
            int i = 1 / 0;
        } catch (Exception e) {
            e.printStackTrace();
            // 拋出自定義異常信息
            throw new SysException("查詢用戶錯誤。。。。");
        }

        return "success";
    }

}


  • 異常處理器
package com.tzb.exception;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 異常處理器
 */
public class SysExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
                                         HttpServletResponse response, Object o, Exception ex) {
        // 獲取異常對象
        SysException e = null;
        if(ex instanceof SysException){
            e = (SysException) ex;
        }else{
            e = new SysException("系統正在維護。。。");
        }

        ModelAndView mv = new ModelAndView();
        mv.addObject("errMsg", e.getMessage());
        mv.setViewName("error");

        return mv;
    }
}


  • 配置異常處理器
    在這裏插入圖片描述

在這裏插入圖片描述

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>發生了異常</title>
</head>
<body>
${errMsg}
</body>
</html>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章