SpringMvc拦截器preHandle,postHandle,afterCompletion

目录

1.拦截器介绍

2.SpringMVC执行流程( 内含拦截器执行流程 ) 

3.拦截器类

4.拦截器preHandle,postHandle,afterCompletion

preHandle

postHnadle 

afterCompletion


1.拦截器介绍

SpringMVC中的Interceptor拦截器是非常重要的,他的作用就是拦截指定用户的请求,并进行相应的预处理和后处理,他拦截的时间点在(处理器映射器根据用户提交的请求映射出了所要执行的处理器类,并且也找到了要执行该处理器类的处理器适配器,在处理器适配器执行该处理器类之前)。当然,在处理器映射器映射出所要执行的处理类时,已经将拦截器与处理器组合成一个处理器执行链,并返还给了中央调度器。

2.SpringMVC执行流程( 内含拦截器执行流程 ) 

 3.拦截器类

package com.liuhaiyang.handler;
 
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.util.Date;
 
/**
 * 拦截器
 */
public class Myhandler implements HandlerInterceptor {
    /**
     *  preHandle:预先处理请求的方法 。相当于总开关 参数:Object handler:被拦截的控制器对象(Mycontroller)
     *      返回值:Boolean   当为真时,请求正确,可以被Controller处理,程序正常执行。
     *          当为假时,请求不能被处理,控制器方法不会执行。请求到此截止。
     *     特点:1.预处理方法的执行时间:在控制器方法之前先执行的. 2.可以对请求做处理,可以做登陆检查,全限的判断,统计数据等等
     *     3.决定请求是否被执行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("=====MyHandler拦截器的preHandler====");
       // request.getRequestDispatcher("/tips.jsp").forward(request,response);
        return true;
    }
 
    /**
     *  postHandler:后处理方法 参数:Object handler:被拦截的控制器对象(MyController)
     *          ModelAndView mv:控制器方法的返回值(请求的执行结果)
     *     特点:1.在控制器方法之后执行的。  2.能获取到控制器方法的执行结果。可以修改原来的执行结果
     *     可以修改数据,也可以修改视图。   3.可以做对请求的二次处理
     */
    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response,
                           Object handler, ModelAndView mv) throws Exception {
        System.out.println("=====MyHandler拦截器的postHandler====");
       }
    }
 
    /**
     *  afterCompletion:最后执行的方法  参数:Object handler:被拦截的控制器对象(MyController) Exception ex:异常对象
     *  特点:1.在请求处理完成后执行的,请求处理完成的标志 是视图处理完成,对试图执行forward操作后
     *       2.可以做程序最后要做的工作,释放内存,清理临时变量
     *       3.方法的执行条件:1)当前的拦截器它的preHandler方法必须执行。 2)preHandler必须返回true
     */
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("=====MyHandler拦截器的afterCompletion====");
     
    }
}

4.拦截器preHandle,postHandle,afterCompletion

preHandle

调用时间:Controller方法处理之前

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序一个接一个执行

若返回false,则中断执行,注意:不会进入afterCompletion

postHnadle 

调用前提:preHandle返回true

调用时间:Controller方法处理完之后,DispatcherServlet进行视图的渲染之前,也就是说在这个方法中你可以对ModelAndView进行操作。

执行顺序:链式Intercepter情况下,Intercepter按照声明的顺序倒着执行。

备注:postHandle虽然post打头,但post、get方法都能处理

 afterCompletion

调用前提:preHandle返回true

调用时间:DispatcherServlet进行视图的渲染之后

多用于清理资源

  • 8
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星星不喝药

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值