• 中文
    • English
  • 注册
  • 查看作者
    • SpringMVC:拦截器

      一.  Interceptor

      首先编写一个拦截器,编辑器需要添加@Component注解,并实现HandlerInterceptor 接口,然后重写preHandle、postHandle、afterCompletion,其中:

      • preHandle:在请求目标请求之前执行,返回值如果为true,则代表放行,如果为false,则代表为拦截

      • postHandle:请求目标请求之后执行,返回视图之前

      • afterCompletion:请求完成时执行

      package io.zhangjia.springmvc.interceptors;
      
      import org.springframework.stereotype.Component;
      import org.springframework.web.servlet.HandlerInterceptor;
      import org.springframework.web.servlet.ModelAndView;
      
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      
      @Component
      public class Interceptor implements HandlerInterceptor {
         
          @Override
          public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
              System.out.println("Interceptor.preHandle");
              return true;
          }
      
          @Override
          public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
              System.out.println("Interceptor.postHandle");
          }
      
          @Override
          public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
              System.out.println("Interceptor.afterCompletion");
          }
      }

      接下来在spring-mvc.xml中配置拦截器:

          <mvc:interceptors>
              <ref bean="interceptor" />
          </mvc:interceptors>

      ref的bean属性的值即为我们的拦截器类的类名小写(因为添加了@Component注解,则其id默认为类名小写)

      最后编写Controller和jsp:

      @Controller
      public class Test {
      
          @RequestMapping("/test")
          public String testInterceptor(String name,Model model) {
              System.out.println("Test.testInterceptor");
              model.addAttribute("result",name);
              return "test";
          }
      
      }
      
      <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
      <!DOCTYPE html>
      <html>
      <head>
          <title>Title</title>
      </head>
      <body>
      <h1>你好</h1>
      <h1>${requestScope.result}</h1>
      </body>
      </html>

      当我们访问http://localhost:8888/sm/test?name=张甲时,控制台输出:

      Interceptor.preHandle
      Test.testInterceptor
      Interceptor.postHandle
      Interceptor.afterCompletion

      如果我们将preHandle的返回值修改为false,即拦截, 则控制台输出:

      Interceptor.preHandle

      二.  总结

      1.  配置拦截器

      • 添加@Component注解,并实现HandlerInterceptor 接口

      2.  配置spring-mvc.xm

      <mvc:interceptors>
         <ref bean="interceptor" />
      </mvc:interceptors>

    • 0
    • 1
    • 0
    • 1.6k
    • success。

      请登录之后再进行评论

      登录
    • 1
      “6”“6”
    • 赞助本站

      • 支付宝
      • 微信
      • QQ

      感谢一直支持本站的所有人!

      单栏布局 侧栏位置: