servlet过滤器的链式处理

来源:互联网 发布:world of goo mac 编辑:程序博客网 时间:2024/06/05 20:49
 

servlet过滤器的链式处理

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

[java] view plaincopyprint?
  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 plaincopyprint?
  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 plaincopyprint?
  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编码
0 0
原创粉丝点击