发表于: 2017-06-25 22:30:20
1 1095
今天完成的事情:
今天本来想将上传图片的接口改到自己的七牛云上,在研究了一下公司封装的图片仓库工具类以后,发现其中好像并没有七牛云的实现类,只有阿里、腾讯、金山等。
明天计划的事情:
明天把拦截器的问题解决了,项目差不多就解决了,剩下的就是改bug、等前端完成页面、研究后台管理模块、写简历、看理论。
遇到的问题:
interceptor拦截器配置了,在util中也有工具类。可是/a/u/**的请求直接发给Controller了,不经过拦截器,这是什么原因?难道是UserInterceptor中的配置有问题?
收获:
今天重新复习了拦截器和过滤器:
Filter和Interceptor的区别
- Filter是基于函数回调的,而Interceptor则是基于Java反射的。
- Filter依赖于Servlet容器,而Interceptor不依赖于Servlet容器。
- Filter对几乎所有的请求起作用,而Interceptor只能对action请求起作用。
- Interceptor可以访问Action的上下文,值栈里的对象,而Filter不能。
- 在action的生命周期里,Interceptor可以被多次调用,而Filter只能在容器初始化时调用一次。
Filter和Interceptor的执行顺序
过滤前-拦截前-action执行-拦截后-过滤后
HandlerInterceptor 接口中定义了三个方法
(1 )preHandle (HttpServletRequest request, HttpServletResponse response, Object handle) 方法,顾名思义,该方法将在请求处理之前进行调用。该方法的返回值是布尔值Boolean类型的,当它返回为false 时,表示请求结束,后续的Interceptor 和Controller 都不会再执行;当返回值为true 时就会继续调用下一个Interceptor 的preHandle 方法,如果已经是最后一个Interceptor 的时候就会是调用当前请求的Controller 方法。
(2 )postHandle (HttpServletRequest request, HttpServletResponse response, Object handle, ModelAndView modelAndView) 方法,顾名思义就是在当前请求进行处理之后,也就是Controller 方法调用之后执行,但是它会在DispatcherServlet 进行视图返回渲染之前被调用,所以我们可以在这个方法中对Controller 处理之后的ModelAndView 对象进行操作。
(3 )afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handle, Exception ex) 方法,该方法将在整个请求结束之后,也就是在DispatcherServlet 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。
评论