Spring Mvc那点事---(20)Spring Mvc过滤器Filter分类
2016-07-03 16:29
405 查看
过滤器Filter主要分四大类,Request,INCLUDE,FORWARD,ERROR,可以通过FILTER中Dispather标签进行设置,Dispather拦截所有的web中请求调用方式,默认是REQUEST方式。下面我们看看各种方式的用法
1.REQUEST
这是默认的处理方式,假设我们访问任何页面都跳转到login页面,我们可以通过如下设置
但是,我们换一种方式,就不会出现如下问题,使用forward跳转,因为默认情况下,Request设置对forward跳转不进行拦截
FORWARD只对通过request.getRequestDispatcher进行forward转发的请求进行处理,
可以在web.xml进行设置
3.INCLUDE
INCLUDE只对通过request.getRequestDispatcher进行INCLUDE的请求进行过滤
4.ERROR
如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用,也就是假设我们访问一个不存在的页面的地址时候,就会调用异常处理
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
1.REQUEST
这是默认的处理方式,假设我们访问任何页面都跳转到login页面,我们可以通过如下设置
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("filterThree---"+"doFilter开始处理"+new Date()); //arg2.doFilter(arg0, arg1); HttpServletResponse response=(HttpServletResponse)arg1; HttpServletRequest request=(HttpServletRequest)arg0; response.sendRedirect(request.getContextPath()+"/Home/login"); System.out.println("filterThree---"+"doFilter处理完成"+new Date()); }上面的代码会造成死循环,因为我们访问任何页面都跳转到login页面,我们跳转到login页面处理请求时候,也会跳转到login页面,反复跳转,造成死循环。
但是,我们换一种方式,就不会出现如下问题,使用forward跳转,因为默认情况下,Request设置对forward跳转不进行拦截
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("filterThree---"+"doFilter开始处理"+new Date()); //arg2.doFilter(arg0, arg1); HttpServletResponse response=(HttpServletResponse)arg1; HttpServletRequest request=(HttpServletRequest)arg0; //response.sendRedirect(request.getContextPath()+"/Home/login"); request.getRequestDispatcher("/Home/login").forward(arg0, arg1); System.out.println("filterThree---"+"doFilter处理完成"+new Date()); }2.FORWARD
FORWARD只对通过request.getRequestDispatcher进行forward转发的请求进行处理,
可以在web.xml进行设置
<filter> <filter-name>threefilter</filter-name> <filter-class>com.filter.filterThree</filter-class> </filter> <filter-mapping> <filter-name>threefilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>FORWARD</dispatcher> </filter-mapping>
3.INCLUDE
INCLUDE只对通过request.getRequestDispatcher进行INCLUDE的请求进行过滤
4.ERROR
如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用,也就是假设我们访问一个不存在的页面的地址时候,就会调用异常处理
<error-page> <error-code>404</error-code> <location>/Home/error</location> </error-page> <filter> <filter-name>threefilter</filter-name> <filter-class>com.filter.filterThree</filter-class> </filter> <filter-mapping> <filter-name>threefilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>ERROR</dispatcher> </filter-mapping>
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { // TODO Auto-generated method stub System.out.println("filterThree---"+"error处理"+new Date()); //arg2.doFilter(arg0, arg1); }
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
相关文章推荐
- 分享微信开发Html5轻游戏中的几个坑
- jQuery plugin items filter
- 全国哀悼日网站页面变成灰色的filter方法
- 用css filter做鼠标滑过图片效果
- C# MVC模式下商品抽奖功能实现
- Zend的MVC机制使用分析(二)
- ASP.NET MVC 4 捆绑和缩小实例介绍
- ASP.NET Mvc开发之查询数据
- ASP.NET MVC中将控制器分离到类库的实现
- asp.net实现在非MVC中使用Razor模板引擎的方法
- ASP.NET MVC中的AJAX应用
- 为ASP.NET MVC及WebApi添加路由优先级
- ASP.NET MVC中图表控件的使用方法
- Asp.net mvc实时生成缩率图到硬盘
- 剖析ASP.NET MVC的DependencyResolver组件
- ASP 使用Filter函数来检索数组的实现代码
- ASP.NET MVC的四种验证编程方式
- ASP.NET MVC @Helper辅助方法和@functons自定义函数的使用方法
- 利用ASP.NET MVC+Bootstrap搭建个人博客之修复UEditor编辑时Bug(四)
- 浅谈JavaScript前端开发的MVC结构与MVVM结构