过滤器(Filter)技术的应用 J2EE 提供了一种特殊的Servlet,就是Filter。它不是一种单独的网络组件,因为它不产生请求和响应信息,它必须依附于其他的网络组件存在。所以我们利用它完成信息的编码转化、数据加密、身份验证、数据压缩、日志记录等很多种工作。下面我们共同看一下 Filter 的结构和具体的应用方法,并且结合实例进行讲解。 一、Filter 的结构 我们自己编写的Filter 必须要实现 javax.servlet.Filter 接口,这个接口只要包含了三个主要的方法: init()-初始化过滤器,它的输入参数 javax.servlet.FilterConfig 的一个实例,可以这里初始化过滤要使用到的FilterConfig。这个方法由 Web 容器自动调用。 doFilter()-进行具体的过滤操作,这个方法以javax.servlet.ServletRequest 请求信息,javax.servlet.ServletResponse 响应信息,javax.servlet.FilterChain 过滤链。过滤链,在Web应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。 destory()-销毁过滤器,可以在这里释放使用完的资源,例如设置过滤器中 FilterConfig为null。 二、在Web 程序中建立过滤器 1、建立实现 javax.servlet.Filter 接口的自定义 Filter 程序。下面是一个进行请求信息编码转化的Filter: import java.io.IOException; import java.util.Enumeration; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; public class EncodeFilter implements Filter{ private FilterConfig filterConfig = null; private String encoding = null; //默认构造函数 public EncodeFilter() { } //初始化过滤器 public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; this.encoding = filterConfig.getInitParameter("encoding"); } //得到编码 private String getEncoding() { return this.encoding; } //执行过滤操作 public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException { //设置编码格式 if(req...