在控制台输出 test.jsp
(5、启动服务器测试
控制台输出:
到此一个正常流程的演示完毕。和图5-1一样,接下来看一下中断的流程。
(1、
HandlerInterceptor3和HandlerInterceptor4 与 之前的 HandlerInteceptor1和HandlerInterceptor2一样,只是在HandlerInterceptor4的preHandle方法返回false:
(2、控制器
流程中断不会执行到控制器,使用之前的TestController控制器。
(3、Spring配置文件chapter5-servlet.xml
interceptors:指定链,的执行顺序就是此处添加的顺序;
(4、视图页面
流程中断,不会执行到视图渲染。
(5、启动服务器测试

控制台输出:
此处我们可以看到只有HandlerInterceptor3的afterCompletion执行,否和图5-2的中断流程。jsp文件
而且页面上会显示我们在HandlerInterceptor4 preHandle 直接写出的响应“break”。
如记录一下请求的处理时间,得到一些慢请求(如处理时间超过500毫秒),从而进行性能改进,一般的反向代理服务器如apache都具有这个功能,但此处我们演示一下使用怎么实现。
实现分析:
1、在进入处理器之前记录开始时间,即在的preHandle记录开始时间;
2、在结束请求处理之后记录结束时间,即在的afterCompletion记录结束实现,并用结束时间-开始时间得到这次请求的处理时间。
问题:
我们的是单例,因此不管用户请求多少次都只有一个实现,即线程不安全,那我们应该怎么记录时间呢?
解决方案是使用ThreadLocal,它是线程绑定的变量,提供线程局部变量(一个线程一个ThreadLocal,A线程的ThreadLocal只能看到A线程的ThreadLocal,不能看到B线程的ThreadLocal)。
代码实现:
NamedThreadLocal:Spring提供的一个命名的ThreadLocal实现。
在测试时需要把stopWatchHandlerInterceptor放在链的第一个,这样得到的时间才是比较准确的。
在访问某些资源时(如订单页面),需要用户登录后才能查看,因此需要进行登录检测。
流程:
1、访问需要登录的资源时,由重定向到登录页面;
2、如果访问的是登录页面,不应该拦截;
3、用户登录成功后,往cookie/session添加登录成功的标识(如用户编号);
4、下次请求时,通过判断cookie/session中是否有该标识来决定继续流程还是到登录页面;
5、在此还应该允许游客访问的资源。
代码如下所示:
提示:推荐能使用servlet规范中的过滤器Filter实现的功能就用Filter实现,因为HandlerInteceptor只有在Spring Web MVC环境下才能使用,因此Filter是最通用的、最先应该使用的。如登录这种最好使用Filter来实现。
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/jisuanjixue/article-59678-2.html
一是少数民族封建统治
我真不知道现在的教育到底是怎样的
我知道我知道我昨天就把高清图都存下来了