2 应用实例
从上面分析可知,实现Servlet过滤器,需要两步:第一步开发过滤器,设计一个实现Filter接口的类;第二步通过web.xml配置过滤器,实现过滤器和Servlet、jsp页面之间的映射。
以下设计一个简单的IP地址过滤器,根据用户的IP地址进行对网站的访问控制。
(1) 过滤器类的设计 ipfilter.java
package ipf;
import javax..servlet.*;
import java.io.IOException;
public class ipfilter implements Filter //实现Filter接口
{ protected FilterConfig config;
protected String rejectedIP;
public void init(FilterConfig filterConfig)throws ServletException
{ this.config=filterConfig; //从Web服务器获取过滤器配置对象
rejectedIP=config.getInitParameter("RejectedIP"); //从配置中取得过滤IP
if(rejectedIP==null) {rejectedIP=""}
}
public void doFilter(ServletRequest request,ServletResponse response,FilterChain )
throwsIOException
{RequestDispatcher dispatcher=request.getRequestDispatcher("rejectedError.jsp");
String remoteIP=request.getRemoteAddr(); //获取客户请求IP
int i=remoteIP.lastIndexOf(".");
int r=rejectedIP.lastIndexOf(".");
String reIPscope= rejectedIP.substring(0,r); //过滤IP段 if (reIPscope.equals(remoteIP.substring(0,i)))
{ dispatcher.forward(request, response); //重定向到rejectedError.jsp 页面
return; //阻塞, 直接返Web回客户端 }
else { chain.doFilter(request, response); // 调用过滤链上的下一个过滤器
}
}
public void destroy(){} //过滤器功能完成后,由Web服务器调用执行,回收
}//过滤器资源
注意:chain.doFilter()语句以前的代码用于对客户请求的处理,以后的代码用于对响应进行处理。
(2) 配置过滤器
在应用程序WEB-INF目录下的web.xml描述符文件中添加以下代码: <filter> <filter-name>ipfilter</filter-name>//过滤器名称
<filter-class>ipf.ipfilter</filter-class>//实现过滤器类
<init-param>
<param-name>RejectedIP</parame-name>
//过滤器初始化参数名RejectedIP
<param-value>192.168.12.*</param-value>
//参数RejectedIP的值
</init-param>
</filter>
<filter-mapping>//过滤器映射
<filter-name>ipfilter</filter-name>
<url-pattern>/*</url-pattern>
//映射到Web应用根目录下所有jsp文件
</filter-mapping>
通过以上设计与配置,就禁止了IP地址处在192.168.12网段的用户对网站的访问
3 结束语
Servlet过滤器功能强大,应用广泛,除支持Servlet和jsp页面的基本功能,比如日志记录、性能、安全、会话处理、XSLT转换等外,在J2EE应用程序中使用Java Servlet过滤器转换其输出,以便兼容任何类型客户端也表现出了很好的前景。Servlet过滤器能够侦测到来自使用WAP协议无线应用协议的移动客户端的呼叫,并且将答复内容转换成WML (无线标记语言)格式。Servlet过滤器也能检测到来自iMode无线客户的呼叫,并将其转变成cHTML(紧凑HTML)格式等等。因而,深刻理解Servlet过滤器的工作机制熟练掌握编程技术,在实际的开发过程中,可以不断地发现新的用途,增强组件的可重用性,提高Web应用程序的可维护性。