SpringMVC攔截器

SpringMVC中的攔截器和Servlet中的過濾器效果類似,都是在Controller前面後者後面做一些事情,但是兩者也有一些區別:

  1. 過濾器可以應用於所有的web技術, 包括SpringMVC,但是攔截器是SpringMVC中的東西,只能用於該框架
  2. 過濾器可以攔截所有請求,包括靜態資源如:html,css等。攔截器不可以

攔截器的原理很簡單,通過一張圖來描述:
在這裏插入圖片描述
  當請求到達後,會首先經過攔截器,攔截器會執行預處理方法,然後放行將請求發送到Controller,Controller方法執行後,會先經過攔截器的後處理方法,然後返回頁面,加載頁面完成後,還會執行攔截器頁面加載後的方法。所以,總共有三個方法,執行的位置需要搞清楚。

自定義一個攔截器首先需要寫一個類,實現HandlerInterceptor接口,實現三個上面所說的方法

public class MyInterceptor implements HandlerInterceptor {

    //預處理 true表示放行,false表示不放行
    @Override
    public boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {
        System.out.println("攔截器執行了...preHandle");
        return true;
    }

    //後處理
    @Override
    public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {
        System.out.println("攔截器執行了...postHandle");
    }

    //頁面加載完成處理
    @Override
    public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {
        System.out.println("攔截器執行了...afterCompletion");
    }
}

然後在配置文件中配置該攔截器

    <!--配置攔截器-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/user/*"/>
            <bean id="myInterceptor" class="test.interceptor.MyInterceptor"/>
        </mvc:interceptor>
    </mvc:interceptors>

最後定義 Controller方法

@Controller
@RequestMapping("/user")
public class InterceptorController {

    @RequestMapping("testInterceptor")
    public String testInterceptor() {
        System.out.println("testInterceptor執行了");
        return "success";
    }
}

在頁面上編寫控制檯輸出,使得結果能明顯一點:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>success</title>
</head>
<body>
    <%
        System.out.println("success頁面執行了");
    %>
</body>
</html>

執行,查看結果:
在這裏插入圖片描述

攔截器鏈的就是配置多個攔截器,配置的方法相同,只不過需要注意順序

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章