servlet过滤器的链式处理

 

servlet过滤器的链式处理

分类: Java
先贴代码,用输出结果来阐述原理。

[java]  view plain copy print ?
  1. package org.lxh.filterdemo;  
  2.   
  3. import java.io.IOException;  
  4. import javax.servlet.Filter;  
  5. import javax.servlet.FilterChain;  
  6. import javax.servlet.FilterConfig;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10.   
  11. public class SimpleFilter implements Filter{  
  12.     public void init(FilterConfig config) throws ServletException{  
  13.         String initParam = config.getInitParameter("ref");  
  14.         System.out.println("** 过滤器初始化,初始化参数="+initParam+" **");  
  15.     }  
  16.     public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throws IOException,ServletException{  
  17.         System.out.println("** 执行doFilter()方法之前. **");  
  18.         System.out.println("** 过滤器开始工作 **");  
  19.         chain.doFilter(req, resp);  
  20.         System.out.println("** 执行doFilter()方法之后. **");  
  21.     }  
  22.     public void destroy(){  
  23.         System.out.println("** 过滤器销毁 **");          
  24.     }  
  25. }  


[java]  view plain copy print ?
  1. package org.lxh.filterdemo;  
  2.   
  3. import java.io.IOException;  
  4. import javax.servlet.Filter;  
  5. import javax.servlet.FilterChain;  
  6. import javax.servlet.FilterConfig;  
  7. import javax.servlet.ServletException;  
  8. import javax.servlet.ServletRequest;  
  9. import javax.servlet.ServletResponse;  
  10.   
  11. public class SimpleFilter2 implements Filter{  
  12.     public void init(FilterConfig config) throws ServletException{  
  13.         String initParam = config.getInitParameter("ref");  
  14.         System.out.println("** SimpleFilter2.过滤器初始化,初始化参数="+initParam+" **");  
  15.     }  
  16.     public void doFilter(ServletRequest req,ServletResponse resp,FilterChain chain)throws IOException,ServletException{  
  17.         System.out.println("** 执行SimpleFilter2.doFilter()方法之前. **");  
  18.         System.out.println("** SimpleFilter2.过滤器开始工作 **");  
  19.         chain.doFilter(req, resp);  
  20.         System.out.println("** 执行SimpleFilter2.doFilter()方法之后. **");  
  21.     }  
  22.     public void destroy(){  
  23.         System.out.println("** SimpleFilter2.过滤器销毁 **");          
  24.     }  
  25. }  



web.xml

[html]  view plain copy print ?
  1. <filter>  
  2.     <filter-name>simple</filter-name>  
  3.     <filter-class>org.lxh.filterdemo.SimpleFilter</filter-class>  
  4.     <init-param>  
  5.         <param-name>ref</param-name>  
  6.         <param-value>HELLO WORLD</param-value>  
  7.     </init-param>  
  8. </filter>  
  9. <filter-mapping>  
  10.     <filter-name>simple</filter-name>  
  11.     <url-pattern>/*</url-pattern>  
  12. </filter-mapping>  
  13. <filter>  
  14.     <filter-name>simple2</filter-name>  
  15.     <filter-class>org.lxh.filterdemo.SimpleFilter2</filter-class>  
  16.     <init-param>  
  17.         <param-name>ref</param-name>  
  18.         <param-value>HELLO WORLD</param-value>  
  19.     </init-param>  
  20. </filter>  
  21. <filter-mapping>  
  22.     <filter-name>simple2</filter-name>  
  23.     <url-pattern>/*</url-pattern>  
  24. </filter-mapping>  




代码完毕,然后刷新任意Context下的任意页面,输出如下:

** 执行doFilter()方法之前. **
** 过滤器开始工作 **
** 执行SimpleFilter2.doFilter()方法之前. **
** SimpleFilter2.过滤器开始工作 **
** 执行SimpleFilter2.doFilter()方法之后. **
** 执行doFilter()方法之后. **

这时候想想链式处理,每个过滤器都会输出自己的doFilter()方法处理前后。而且最早声明的过滤器会包围最末声明的过滤器。这就是链式的处理特点!


使用ServletFilter的例子有:登录验证,设置Request.setCharacterEncoding编码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值