天天看點

SSM學習----SpringMVC之攔截器的使用

文章目錄

    • 1.攔截器的作用
    • 2攔截器和過濾器的差別
    • 3.攔截器快速入門
      • 1.建立攔截器類實作HandlerInterceptor接口
      • 2.配置攔截器
      • 3.測試攔截器的攔截效果
    • 攔截器執行原理
    • 對傳回内容的修改
    • 多個攔截器執行流程

# SpringMVC攔截器

1.攔截器的作用

類似于Servlet中的過濾器filter,用于對處理器進行預處理和後處理

将攔截器按一定的順序連結成一條鍊,稱為攔截器鍊,在通路被攔截的方法和字段時,攔截器鍊中的攔截器就會按其之前定義的順序被調用,也是AOP思想的展現。

2攔截器和過濾器的差別

SSM學習----SpringMVC之攔截器的使用

3.攔截器快速入門

1.建立攔截器類實作HandlerInterceptor接口

public class MyInterceptor implements HandlerInterceptor {

    //在目标方法執行之前執行

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandler....");
        return true;//代表攔截器開關是否打開。
    }
    //在目标方法執行之後,視圖傳回之前執行

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        System.out.println("postHandler....");
    }
//在整個流程執行完畢執行

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterHandler....");
    }
}
           

2.配置攔截器

<mvc:interceptors>
    <mvc:interceptor>
        <mvc:mapping path="/**"/>
        <bean class="com.bao.intercepetoor.MyInterceptor"/>
    </mvc:interceptor>
</mvc:interceptors>
           

3.測試攔截器的攔截效果

SSM學習----SpringMVC之攔截器的使用

攔截器執行原理

随着攔截器的執行,首先會通路preHandle方法,如果其傳回結果為false,則會被攔截,不會執行相應的操作。當傳回值為true時,則會執行目标資源,并且執行posthandle和afterhandle方法

對參數内容判斷

System.out.println("preHandler....");
String param = request.getParameter("param");
if ("yes".equals(param)) {
    return true;
}else {
    request.getRequestDispatcher("/error.jsp").forward(request,response);
    return false;
}
           

對傳回内容的修改

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

    modelAndView.addObject("name","itcast");
    System.out.println("postHandler....");

}
           

多個攔截器執行流程

定義在前面的攔截器先執行,定義在後面的先傳回。

SSM學習----SpringMVC之攔截器的使用
SSM學習----SpringMVC之攔截器的使用