SpringMVC系列之(十二)拦截器

拦截器

过滤器在这里插入图片描述

拦截器
在这里插入图片描述
拦截器链
在这里插入图片描述

1. 过滤器与拦截器的比较

  1. 过滤器是servlet规范中的一部分,任何Java web工程都可使用;拦截器是SpringMVC自己的,只能在SpringMVC工程中使用。
  2. 过滤器可以对所有要访问的资源拦截;拦截器只能拦截访问的Controller方法,如果访问的是jsp、html、css、image、js不会拦截。

2. 开发步骤

  1. 编写拦截器类,实现HandlerInterceptor接口
  2. 配置拦截器

注:jdk 1.8允许编写接口时实现接口中的方法,这样在实现接口时就可不用实现方法。如此处用到的HandlerInterceptor接口,实现该接口可以不用实现接口内定义的方法。

3. 拦截器实现

  1. 编写拦截器类,实现HandlerInterceptor接口
package cn.itcast.interceptor;

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

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

public class MyInterceptor implements HandlerInterceptor {

    /**
     * preHandle:预处理,Controller中的方法执行前执行
     * @param request
     * @param response
     * @param handler
     * @return true: 放行,执行下一个拦截器的preHandle方法,如果没有下一个拦截器,执行Controller中的方法
     *         false: 不放行,可以通过request和response对象进行页面的跳转
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor1 preHandle running...");
        return true;
    }

    /**
     * postHandle:后处理,Controller中的方法执行后执行
     * 当postHandler和Controller中的方法都有跳转时,跳转的页面是postHandler中指定跳转的页面,但Controller中要跳转的页面也会执行
     * @param request
     * @param response
     * @param handler
     * @param modelAndView
     * @throws Exception
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("MyInterceptor1 postHandle running...");

    }

    /**
     * afterCompletion:页面跳转后执行
     * @param request
     * @param response
     * @param handler
     * @param ex
     * @throws Exception
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("MyInterceptor1 afterCompletion running...");

    }
}

  1. 配置拦截器
<!--    配置拦截器(可以有多个)-->
<mvc:interceptors>
    <mvc:interceptor>
<!--            要拦截的Controller中的方法,除了配置的方法以外的其他方法都不拦截-->
        <mvc:mapping path="/test/*"/>
<!--            不拦截的Controller中的方法,除了配置的方法以外的其他方法都拦截-->
<!--            <mvc:exclude-mapping path="/test/*"/>-->
<!--            拦截到指定的方法后调用的拦截器,也就是自定义的拦截器-->
        <bean class="cn.itcast.interceptor.MyInterceptor"></bean>
    </mvc:interceptor>
</mvc:interceptors>

查看当前类的父类和实现接口的方法
Ctrl + o

Ctrl+N 搜索指定类
查看当前接口的所有实现类快捷键:idea查看接口的所有实现类及类图

posted @ 2024-02-28 08:43  刘二水  阅读(26)  评论(0)    收藏  举报