Spring Mvc那点事---(20)Spring Mvc过滤器Filter分类
来源:互联网 发布:淘宝店的信誉等级 编辑:程序博客网 时间:2024/06/13 03:15
过滤器Filter主要分四大类,Request,INCLUDE,FORWARD,ERROR,可以通过FILTER中Dispather标签进行设置,Dispather拦截所有的web中请求调用方式,默认是REQUEST方式。下面我们看看各种方式的用法
1.REQUEST
这是默认的处理方式,假设我们访问任何页面都跳转到login页面,我们可以通过如下设置
public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {// TODO Auto-generated method stubSystem.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 stubSystem.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 stubSystem.out.println("filterThree---"+"error处理"+new Date());//arg2.doFilter(arg0, arg1);}
REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。
- Spring Mvc那点事---(20)Spring Mvc过滤器Filter分类
- Spring Mvc那点事---(18)Spring Mvc过滤器Filter
- Spring Mvc那点事---(19)Spring Mvc过滤器Filter实现登陆验证
- Spring Mvc那点事---(3)Spring Mvc项目创建
- Spring Mvc那点事---(4)Spring Mvc控制器Controller
- Spring Mvc那点事---(7)Spring Mvc @Autowired注解
- Spring Mvc那点事---(8)Spring Mvc @Resource注解
- Spring Mvc那点事---(9)Spring Mvc @Component注解
- Spring Mvc那点事---(21)Spring Mvc拦截器
- Spring Mvc那点事---(23)Spring Mvc监听器
- Spring Mvc那点事---(38)MVC执行流程
- Spring Mvc那点事---(31)Spring事务管理
- Spring Mvc那点事---(1)开发环境搭建
- Spring Mvc那点事---(2)Maven环境搭建
- Spring Mvc那点事---(36)rest服务框架搭建
- Spring Mvc那点事---(37)rest服务项目模块介绍
- Spring Mvc那点事---(39)SSM服务框架搭建
- Spring Mvc那点事---(5)Spring Mvc请求参数传递
- Android Tombstone/Crash的log分析和定位
- linux管道通信原理
- ORACLE 索引
- gdb调试多进程
- RT5350配置uboot 支持8M的Flash
- Spring Mvc那点事---(20)Spring Mvc过滤器Filter分类
- Sublime Text 3 插件安装
- I2C死锁原因及解决方法
- 自己写的,用onpropertychange 和 oninput时间实现对文本框的实时触发
- JSON解析工具比较,主要GSON和FastJSON
- 求解背包问题
- 设计模式笔记系列
- Cmake系列:如何使用CMake编译自己项目
- GMS环境下获取泰文版Google法律信息异常