SSM拦截器创建步骤

day41:springmvc拦截器

拦截器步骤
1.新建maven web项目
2.加入依赖
3.创建controller类
4.创建一个普通类,作为拦截器使用
(1)实现HandlerInterceptor接口
(2)实现接口中的三个方法
5.创建show.jsp
6.创建springmvc的配置文件
(1)组件扫描器,扫描@Controller注解
(2)声明拦截器,指定拦截的请求uri地址

(1)创建普通类实现拦截器HandlerInterceptor接口,实现三个方法

// 拦截器类:拦截用户请求
public class StudentInterceptor implements HandlerInterceptor{

    /**
     *  preHandle:叫做预处理方法。
     *          重要:是整个项目的入口,门户。请求需要从这里进入。
     *          当preHandle返回true 请求可以被处理
     *          preHandle返回false,请求到此方法就截止
     * @param request
     * @param response
     * @param handler:Object类型,指被拦截的对象
     * @return boolean
     *              true:请求时通过了拦截器的验证,可以执行处理器方法
     *              false:请求没有通过拦截器的验证,请求到达拦截器就截止了。请求没有被处理
     *
     * @throws Exception
     *
     *      特点:
     *          1.方法在控制器方法(StudentController的addStudent)之前先执行
     *              用户的请求首先到达此方法
     *          2.在这个 方法中可以获取请求的信息,验证请求是否符合要求。
     *              可以验证用户是否登录,验证用户是否有权限访问某个链接地址(url)
     *                  如果验证失败,可以截断请求,请求不能被处理。
     *                  如果验证成功,可以放行请求,此时控制器方法才能执行。
     */
    @Override
    public boolean preHandle(HttpServletRequest request,
                             HttpServletResponse response,
                             Object handler) throws Exception {
        System.out.println("拦截器的preHandle方法执行");
        return true;
    }

    /**
     *      postHandle:后处理的方法
     *
     * @param request
     * @param response
     * @param handler :被拦截的处理器对象,例如:处理器对象StudentController
     * @param modelAndView :处理器方法的返回值
     * @throws Exception
     *
     *      特点:
     *      1.在处理器方法之后执行的(tudentController.addStudent)
     *      2.能够获取到处理器方法的返回值ModelAndView,可以求改ModelAndView中的数据和视图,
     *      可以影响到最后的执行结果。
     *      3.主要是对原来的执行结果做二次修正
     */
    @Override
    public void postHandle(HttpServletRequest request,
                           HttpServletResponse response,
                           Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("拦截器的postHandle方法执行");
        // 对原来的addStudent执行结果进行调整
        if (modelAndView != null){
            modelAndView.addObject("mydate", new Date());
            modelAndView.setViewName("other");
        }
    }


    /**
     *      afterCompletion:最后的执行方法
     * @param request
     * @param response
     * @param handler :被拦截器的处理器对象
     * @param ex :程序中发生的异常
     * @throws Exception
     *              特点:
     *              1.在请求处理完成后执行的。框架中规定是当你的视图处理完成后,对视图执行了forward。就认为请求结束
     *              2.一般做资源回收工作的,程序请求过程中创建了一些对象,在这里可以删除,把占用的内存回收。
     */
    @Override
    public void afterCompletion(HttpServletRequest request,
                                HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器的afterCompletion方法执行");
    }
}

(2)springmvc配置文件声明拦截器

<!--    声明拦截器:拦截器可以有0或多个-->
    <mvc:interceptors>
<!--        声明第一个拦截器-->
        <mvc:interceptor>
<!--            path:指定拦截的请求uri地址,可以使用通配符 **
                    **:表示任意的字符,文件或者多级目录和目录中的文件
                localhost:8080/myWeb/user/addUser
                /user/**:  代表/user/下的多有路径都拦截
-->
            <mvc:mapping path="/**"/>
<!--            声明拦截器对象-->
            <bean class="com.itcast.handler.StudentInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>

拦截器执行顺序
在这里插入图片描述
在这里插入图片描述
多个拦截器执行图解
在这里插入图片描述

拦截器和过滤器区别
1.过滤器是tomcat创建的对象,拦截器是springmvc创建的对象
2.过滤器是servlet中的对象,拦截器是实现HabdlerInterceptor
3.过滤器是用来设置request,response的参数,属性的,侧重于数据库过滤的:过滤敏感字符等。 拦截器是用来验证请求的,能截断请求。
4.过滤器实在拦截器之前先执行
5.过滤器有一个执行时间点,拦截器有三个执行点
6.过滤器可以处理jsp,js,html等 拦截器侧重拦截对Controller的对象,如果你的请求不能被DispatcherServlet接收, 这个请求不会执行拦截器内容。
7.拦截器拦截普通类方法执行,过滤器过滤Servlet请求响应

拦截器和过滤器的执行图解
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值