prehandle 重复执行_springmvc--拦截器的preHandler返回false后的执行顺序

本文详细介绍了在 SpringMVC 中自定义拦截器时,如果 `preHandle` 方法返回 `false`,会如何影响拦截器链的执行顺序。通过示例代码和调试过程,展示了当 `MyHandlerInterceptor2` 的 `preHandle` 返回 `false` 时,如何触发 `afterCompletion` 方法,以及改变返回值为 `true` 时的正常拦截器执行流程。
摘要由CSDN通过智能技术生成

编写springmvc中的自定义拦截器

1.实现接口 HandlerInterceptor

package com.kevin.interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class MyHandlerInterceptor implements HandlerInterceptor{

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

System.out.println("------------------preHandle--------------------------");

return true;

}

@Override

public void postHandle(HttpServletRequest request,

HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

System.out.println("------------------postHandle--------------------------");

}

@Override

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex)

throws Exception {

System.out.println("------------------afterCompletion--------------------------");

}

}

package com.kevin.interceptors;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.HandlerInterceptor;

import org.springframework.web.servlet.ModelAndView;

public class MyHandlerInterceptor2 implements HandlerInterceptor{

@Override

public boolean preHandle(HttpServletRequest request,

HttpServletResponse response, Object handler) throws Exception {

System.out.println("------------------preHandle2--------------------------");

return false;

}

@Override

public void postHandle(HttpServletRequest request,

HttpServletResponse response, Object handler,

ModelAndView modelAndView) throws Exception {

System.out.println("------------------postHandle2--------------------------");

}

@Override

public void afterCompletion(HttpServletRequest request,

HttpServletResponse response, Object handler, Exception ex)

throws Exception {

System.out.println("------------------afterCompletion2--------------------------");

}

}

2.在springmvc-servlet.xml的配置文件中加入拦截器配置

3.controller

@Controller

@RequestMapping("/demo")

public class AnnotationController {

/**

* test annotation springmvc

* @return

*/

@RequestMapping("anno")

public ModelAndView testAnnotation(){

ModelAndView mv = new ModelAndView("anno");

mv.addObject("msg", "注解驱动的mvc");

return mv;

}

}

4.我的tomcat配置

org.apache.tomcat.maven

tomcat7-maven-plugin

${tomcat-maven-plugin.version}

80

/

5.debug启动项目,

在springmvc入口 DispatcherServlet 中加入断点

chrome浏览器  http://localhost/demo/anno.do

getHandler 方法查找mapper  ,返回handler对象和拦截器数组

执行拦截器前置方法

进入方法内

由于 MyHandlerInterceptor2 的 preHandle 方法返回的是 false,执行到拦截器2的preHandler后会进入中间135行的triggerAfterCompletion 方法

此时控制台打印

------------------preHandle--------------------------

------------------preHandle2--------------------------

this.interceptorIndex 的值为1

进入triggerAfterCompletion方法

最终结果为

------------------preHandle--------------------------

------------------preHandle2--------------------------

------------------afterCompletion--------------------------

6.如果将MyHandlerInterceptor2的preHandler的返回值改为true,结果是正常的拦截器执行过程

------------------preHandle--------------------------

------------------preHandle2--------------------------

------------------postHandle2--------------------------

------------------postHandle--------------------------

------------------afterCompletion2--------------------------

------------------afterCompletion--------------------------

时间: 03-13

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值