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应用程序中所有的过滤器会构成一个链状,符合过滤条件的程序将会根据定义的顺序执行所有链中的过滤器。在这个方法中调用FilterChain的doFilter(javax.servlet.ServletRequest, javax.servlet.SerletResponse)方法就可以传递到链中的下一个过滤器。
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(request.getCharacterEncoding() == null) {
String encoding = getEncoding();
if(encoding != null) {
request.setCharacterEncoding(encoding);
}
//传递过滤器
filterChain.doFilter(request, response);
}
}
public void destroy() {
filterConfig = null;
encoding = null;
}
}
2、配置web.xml文件。要想让Filter在程序其他作用必须要在web.xml配置,上面过滤器对应配置文件:
<filter>
<filter-name>Set Encoding Filter</filter-name>
<filter-class>cn.mblogger.mydeman.EncodeFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GBK</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Encoding Filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>元素是配置Filter相关信息,<filter-name>:指定这个Filter的名字,可以任意指定,其实相当于对Filter的描述。<filter-class>:Filter完整的类路径(包路径.类)。<init-param>:指定Filter用到的参数的初始值,其中 <param-name>是参数名,<param-value> 是参数值。在Filter中我们可以使用FilterConfig.getInitParameter(String)获得,其中String代表参数名也就是 的值,例如在上面的Filter中获得encoding的值:filterConfig.getInitParameter("encoding");
<filter-mapping>用来指定经过该Filter的URL样式。<filter-name>是Filter的名字,这个要和相对应的<filter>中<filter-name>一致。<url-pattern>是URL的样式,它定义所有经过这个Filter的URL所应该满足的样式,例如<url-pattern>/*</url-pattern>就是指定了所有的url都会经过这个Filter。
完成了以上过程后,就定义了一个完成的Filter,我们可以添加辅助代码进行测试。
在上面我们提到了过滤链的概念,它有一个执行顺序的问题,那么这个顺序的设置也是在web.xml中完成的,其中的先后顺序指定了这个顺序。在范例中,一共包含了两个过滤器,并且包含了测试代码,我们可以通过调整两个过滤器的先后顺序,查看调整前后结果的不同。
范例程序可以在这里下载。http://www.j2medev.com/Article/UploadFiles/200508/20050810220850674.rar
分享到:
相关推荐
Java EE中Filter技术的研究与应用.pdf
介绍如何在j2ee下的web应用,合理使用filter技术
Filter程序开发与应用上机手册,内含有详细步骤与代码。
Java EE中Filter技术的研究与应用
About a image filter extracting theme from one image and apply to another. 图片融合滤镜,提取一张图片的色彩主题应用在另一张图片中。
IPSec和IP Filter在路由器中的研究与应用.pdf
它在无线电技术的各个领域得到了很广泛的应用。最典型的锁相环由鉴相器(Phase Detector,简称PD)、环路滤波器即低通滤波器(Low Pass Filter,简称LPF)、压控振荡器(Voltage Controlled Oscillator,简称VCO)三...
由于ADSL(Asymmetric Digital Subscriber Line)端到端的通讯结构,传统的监听技术很难进行,在分析了ADSL数据承载方式和用户认证的基础上,设计了一种基于DSLAM(Digital Subscribe Loop Access Multiplexer)技术...
Servlet实验报告.pdf
37 3.5 动态代理 39 3.6 反射机制在Hibernate中的应用 42 3.7 小结 46 第4章 Servlet技术 47 4.1 Servlet简介 47 4.1.1 Servlet的特点 47 4.1.2 Servlet的优势 48 4.1.3 Servlet的工作过程 49 4.1.4 Servlet的生命...
SurfControl Web Filter 应用了Pass-By过滤技术,在实现应用异步响应技术优化之后,能够适用于各种协议和海量网页内容过滤的需求。
电源技术-电磁兼容性合集,主要包含电磁学技术资料文档,共19份。...经典EMI Filter Design第二版 开关电源的电磁兼容性设计与测试 全面解析电磁兼容技术-完整版 应用电磁学基础(第4版) 复变函数(第4版)
警告:本资源教程仅用于技术交流、学习。下载阅读后请自行删除,一切涉及版权、商务因素引起的纠纷由肇事者自行承担。 本资源是 PDF 电子书格式,大小 1.2 MB,带有书签方便读者朋友阅读。 内容预览: 大纲 1、背景...
梁胜彬等编著的《java web应用开发与实践》结合作者多年的教学与软件开发经验,依据教学大纲,面向技术发展方向,选取主流的java web开发技术和开发工具,内容涵盖了jsp基础、jdbc、setvlet、filter、listener、mvc...
作为使用androidsdk构建这些应用程序的实用指南书籍,《android高级编程》从始至终穿插了一系列示例项目,每个项目都引入android的新功能和新技术,以助您达到最圆满的学习效果。书中介绍android的所有基本功能,并...
哈希Filter Trak 660 sc 超低量程浊度仪样本pdf,Filter Trak 660 sc 超低量程浊度仪应用、技术参数、特点、选型。
1. apollo相关的技术教程和文档; 2.adas(高级辅助驾驶)算法设计(例如AEB,ACC,LKA等) 3.自动驾驶鼻祖mobileye的论文和专利介绍 4.自动驾驶学习笔记 5.自动驾驶专项课程(可能是目前最好的自动教师教程),是...
基于Servlet Filter的访问控制过滤器插件,汪克炎,龙毅宏,对于部署在互联网上的J2EE Web应用系统,用户的安全访问是至关重要的。本文介绍使用Servlet Filter技术设计一种可插入的、可扩展的、对��
本书共16章,分为4篇,详细讲解了使用各种软件和平台进行音、视频多媒体编程的技术,以案例为对象展示实现过程、分析技术难点。主要内容包括软件Visual C++2005的开发技术、DirectSound开发音频、DirectShow/VFW开发...