Filter(五)FilterChain执行顺序
来源:互联网 发布:淘宝女士休闲连衣裙 编辑:程序博客网 时间:2024/05/18 01:08
当使用多个Filter时,这些Filter将形成一个Filter链,web服务器在实例化Filter对象时,会将此Filter链传递给doFilter的FilterChain参数。当一个Filter执行doFilter方法时,在此方法中执行FilterChain参数的doFilter方法,将会执行下一个Filter(Filter链下一个还是Filter时)或者访问WEB资源(Filter链中没有Filter了),如图所示:
下面是在web.xml中配置多个Filter,通过程序来演示各个Filter的其执行先后顺序。
<filter> <filter-name>FilterUtils</filter-name> <filter-class>cn.itcast.utils.FilterUtils</filter-class> </filter> <filter-mapping> <filter-name>FilterUtils</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter> <filter-name>EncodeFilter</filter-name> <filter-class>cn.itcast.utils.EncodeFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>EncodeFilter</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping> <filter> <filter-name>FilterJsp</filter-name> <filter-class>cn.itcast.utils.FilterJsp</filter-class> </filter> <filter-mapping> <filter-name>FilterJsp</filter-name> <url-pattern>/*</url-pattern> <dispatcher>REQUEST</dispatcher> </filter-mapping>
三个Filter
public class FilterUtils implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("FilterUtils destory....");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {System.out.println("FilterUtils start....");chain.doFilter(req, resp);System.out.println("FilterUtils end....");}@Overridepublic void init(FilterConfig config) throws ServletException {System.out.println("FilterUtils init....");}}
public class EncodeFilter implements Filter {private String encode;@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("EncodeFilter destroy....");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub//req.setCharacterEncoding(encode);//resp.setCharacterEncoding(encode);//resp.setContentType("text/html;charset="+encode+"");//chain.doFilter(req, resp);System.out.println("EncodeFilter start....");chain.doFilter(req, resp);System.out.println("EncodeFilter end....");}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stub//encode = filterConfig.getInitParameter("encoding");System.out.println("EncodeFilter init....");}}
public class FilterJsp implements Filter {@Overridepublic void destroy() {// TODO Auto-generated method stubSystem.out.println("FilterJSP destory....");}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp,FilterChain chain) throws IOException, ServletException {// TODO Auto-generated method stub//System.out.println("do Filter....");//req.setCharacterEncoding("UTF-8");//resp.setCharacterEncoding("UTF-8");//resp.setContentType("text/html;charset=UTF-8");//chain.doFilter(req, resp);System.out.println("FilterJsp start....");chain.doFilter(req, resp);System.out.println("FilterJsp end....");}@Overridepublic void init(FilterConfig config) throws ServletException {// TODO Auto-generated method stub//System.out.println("init....");//System.out.println("Filter Name is:"+config.getFilterName());//Enumeration enumation = config.getInitParameterNames();//String name;//while(enumation.hasMoreElements()){//name = (String) enumation.nextElement();//System.out.println("name is:"+name);//System.out.println("value is:"+config.getInitParameter(name));//}System.out.println("FilterJsp init....");}}
//初始化结果:
FilterUtils init....EncodeFilter init....FilterJsp init....//访问WEB资源时的结果
FilterUtils start....EncodeFilter start....FilterJsp start....你好中国FilterJsp end....EncodeFilter end....FilterUtils end....
//web服务器关闭时结果:
FilterUtils destory....EncodeFilter destroy....FilterJSP destory....
0 0
- Filter(五)FilterChain执行顺序
- Filter、FilterChain
- Filter、FilterChain
- FILTER的执行顺序
- Filter 执行顺序介绍
- filter的执行顺序
- Filter、FilterChain、FilterConfig
- Servlet filter过滤RequestDispatcher.forward内部转发, 及FilterChain.doFilter的顺序
- Java Filter的执行顺序
- filter执行顺序与实例
- Filter介绍,执行顺序,实例
- JavaWeb Filter 的执行顺序
- 探究Servlet Filter 执行顺序
- Filter介绍,执行顺序,实例
- Filter过滤器执行的顺序
- servlet 和 filter执行顺序
- java web servlet 过滤器filter与过滤器链filterchain的执行过程分析与验证
- Java-Filter-FilterChain-FilterConfig源码
- 动手测试C++中指针与引用作为函数参数的行为
- 关于python中的setup.py
- JConsole 的升级版 VisualVM 入门指南
- shell中的大括号和小括号
- wordpress彩色标签云代码实现两大方法
- Filter(五)FilterChain执行顺序
- poj-2251-Dungeon Master(bfs)
- HugePages on Oracle Linux 64-bit
- spring+hibernate自动生成数据库表结构
- Windows系统常用的端口
- maven 配置篇 之 settings.xml
- C语言位运算详解
- 优秀程序员不得不知道的20个位运算技巧
- 网站架构之缓存应用(摘录)