发表于: 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 渲染了对应的视图之后执行。这个方法的主要作用是用于进行资源清理工作的。



返回列表 返回列表
评论

    分享到