springmvc拦截器(2)

HandlerInterceptor和HandlerExceptionResolver
上一篇博文介绍了HandlerExceptionResolver,全局try-catch 处理Controller里的异常。
而HandlerInterceptor实现Controller拦截,实现pre和post方法

  1. 首先HandlerInterceptor会执行代码1的preHandle方法,之后是方法2的preHandle
  2. 接下来执行controller的方法
  3. 然后顺序颠倒,方法2的后处理方法postHandle,方法1的后处理方法
  4. 然后执行controller返回的,servlet处理方法
  5. 最后执行方法2的afterCompletion,方法1的afterCompletion也就是所谓的最终处理

此处现象是拦截器做了2此处理拦截

  1. 在springmvc.xml配置 (此处需要配置2次,因为2个类需要执行拦截)
  2. 注册类实现了HandlerInterceptor接口并重写里面的方法
<!-- 配置拦截器   -->
    <mvc:interceptors>
    <!--  配置拦截器    -->
        <mvc:interceptor>
            <!--  拦截具体的方法    -->
            <mvc:mapping path="/user/**"/>
            <!--  不拦截的方法    -->
<!--            <mvc:exclude-mapping path=""/>-->
            <!--  配置拦截器对象    -->
            <bean class="cn.itcast.controller.cn.itcast.interceptor.MyInterceptor1"/>
        </mvc:interceptor>
    </mvc:interceptors>

    <mvc:interceptors>
        <!--  配置拦截器    -->
        <mvc:interceptor>
            <!--  拦截具体的方法    -->
            <mvc:mapping path="/**"/>
            <!--  不拦截的方法    -->
            <!--            <mvc:exclude-mapping path=""/>-->
            <!--  配置拦截器对象    -->
            <bean class="cn.itcast.controller.cn.itcast.interceptor.MyInterceptor2"/>
        </mvc:interceptor>
    </mvc:interceptors>
public class MyInterceptor1 implements HandlerInterceptor {



    /**
     * controller方法执行前
     * return true 放行,执行下一个拦截器,如果没有,执行controller中的方法
     * return false 不放行
     * @param request
     * @param response
     * @param handler
     * @return
     * @throws Exception
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("MyInterceptor1执行了....前");
        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
        return true;
    }

    /**
     * 后处理方法,controller方法被执行后,success.jsp
     * @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("postHandle1执行了....后");
//        request.getRequestDispatcher("/WEB-INF/pages/error.jsp").forward(request,response);
    }

    /**
     * success.jsp页面执行后
     * @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("最后一个处理方法 afterCompletion1...");
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值