A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 梦想飞翔的猪 于 2017-9-29 16:04 编辑

【石家庄校区】SpringMvc学习记录-拦截器




      最近在学习SpringMvc看到了拦截器,刚开始看到这个东西的时候并没有想太多,因为自己觉得用的机会很少,所以也没在意。直到最近在写post请求乱码和时间格式换的时候才意识到这个东西还可以这么玩,所以查了查资料在这里记录一下。


    1.什么是springmvc拦截器

              拦截器通常一般指的是通过拦截从浏览器发往服务器的一些请求来完成某些功能的一段程序代码,一般在一个请求发生之前,发生时,发生后我们都可以对请求进行拦截

1. 常见应用场景

              日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

              权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;

               性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

               通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。

               OpenSessionInView:如Hibernate,在进入处理器打开Session,在完成后关闭Session。

2. 拦截器执行流程
         拦截器里面有三个方法分别是 preHandler、postHandler、afterHandler

                preHandler:在controller方法执行前 其中三个参数分别是 HttpServletRequest, 请求信息 HttpServletResponse 如果return false 用此参数返回, Object  Handler处理器

                postHandler:在controller方法执行后执行,但是在渲染视图之前,HttpServletRequest , HttpServletResponse , Object , ModelAndView modelandview对数据模型和视图进行处理 可以为null

                afterCompletion:在整个方法处理完成后的回调函数,类似finally,最终执行的方法,但是仅在preHandler返回true后才会执行。如果返回false则使用response          返回。

               多拦截器执行流程

               1. 正常执行流程:
                       HandlerInterceptor1..preHandle..
                       HandlerInterceptor2..preHandle..
                       HandlerInterceptor2..postHandle..
                       HandlerInterceptor1..postHandle..
                       HandlerInterceptor2..afterCompletion..
                       HandlerInterceptor1..afterCompletion..

               2. 中断执行流程
                      HandlerInterceptor1..preHandle..
                      HandlerInterceptor2..preHandle..  (返回false直接返回HandlerInterceptor1..afterCompletion)
                      HandlerInterceptor1..afterCompletion..
     拦截器配置
            1. 实现HandlerInterceptorAdapter
            2. 注册拦截器 在springMvc中添加配置<mvc:interceptors> <bean id="myInterceptor" class="com.admol.web.MyInterceptor" /> </mvc:interceptors>如果需要配置多个拦截器则在 <mvc:interceptors> </mvc:interceptors> 中继续添加即可
     拦截器应用
          登录拦截、post乱码处理等




1 个回复

倒序浏览
不错,springmvc越来越流行
来自宇宙超级黑马专属安卓客户端来自宇宙超级黑马专属安卓客户端
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马