掘金日新计划 · 8 月更文挑战第36天--SpringMVC(一)拦截器

124 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第36天,点击查看活动详情

SpringMVC拦截器:
SpringMVC的处理器拦截器,类似于Servlet开发中的过滤器Filter,用于对处理器进行前置处理和后置处理。 依赖于web框架,在实现上基于Java的反射机制,属于面向切面编程(AOP)的一种运用。由于拦截器是基于web框架的调用,因此可以使用Spring的依赖注入(DI)进行一些业务操作,同时一个拦截器实例在一个 controller生命周期之内可以多次调用。

1.pom.xml引入依赖

image.png

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.1</version>
    <scope>provided</scope>
</dependency>

代码说明: provided
产生的原因是:tomcat中也有servlet-api包,这样,发生了冲突
解决方法:添加provided,因为provided表明该包只在编译和测试的时候用,所以,当启动tomcat的时候,就不会冲突了

2.新增interceptor包并且新建MyInterceptor类文件

image.png

public class MyInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println(request.getRequestURL()+"请求之前");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println(request.getRequestURL()+"目标请求成功");
//        HandlerInterceptor.super.postHandle(request, response, handler, modelAndView);
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println(request.getRequestURL()+"相应内容已经产生");
//        HandlerInterceptor.super.afterCompletion(request, response, handler, ex);
    }
}

代码说明:MyInterceptor实现HandlerInterceptor并且实现三个接口:

  • preHandle:请求前置
  • postHandle:请求返回之前
  • afterCompletion:响应内容返回

3.resources/applicationContext.xml新增配置

image.png

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

代码说明:

  • <mvc:mapping path="/**"/>:表示请求要过滤哪些接口
  • class=com.imooc.restful.interceptor.MyInterceptor:表示拦截类对应的包

4.controller代码

image.png

4.重启应用

image.png