1.概念:
Filter 技术是Servlet 2.3 新增加的功能,Servlet2.3是sun公司与2000年10月发布的,Filter能够对Servlet容器的请求和响应对象进行检查和修改。
Filter本身并不产生请求和响应对象,它只能提供过滤作用。在Servlet被调用之前检查Request对象,修改Request Header和Request内容;在Servlet被调用之后检查Response对象,修改Response Header和Response内容。
Filter负责过滤的Web组件可以是Servlet、JSP或者HTML文件。
2.特点:
Filter可以检查和修改ServletRequest和ServletResponse对象
Filter可以被指定和特定的URL关联,只有当客户请求访问该URL时,才会触发过滤器
Filter可以被串联在一起,形成管道效应,协同修改请求和响应对象
3.Filter的适用场合:
登录过滤,编码过滤,URL过滤,加密过滤等。
4.Filter接口的构成:
所有的Filter类都必须实现javax.servlet.Filter接口。这个接口含有3个过滤器类必须实现的方法:
a.init(FilterConfig):
这是Filter的初始化方法,Servlet容器创建Filter实例后将调用这个方法。在这个方法中可以读取web.xml文件中Filter的初始化参数
b.doFilter(ServletRequest,ServletResponse,FilterChain):
这个方法完成实际的过滤操作,当客户请求访问于Filter关联的URL时,Servlet容器将先调用Filter的doFilter方法。FilterChain参数用于访问后续Filters
c.destroy():
Servlet容器在销毁Filter实例前调用该方法,这个方法中可以释放Filter占用的资源
5.配置Filter
<filter> <filter-name>enconfigFilter</filter-name> <filter-class>com.filter.EnconfigFilter</filter-class> <init-param> <param-name>enconfig</param-name> <param-value>UTF-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>enconfigFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
这是一个字符编码的过滤器,其中:
filter-name 指定过滤器的名字
filter-class 指定过滤器的类名
init-param 为过滤器实例提供初始化参数,可以有多个
url-pattern 指定和过滤器关联的URL,为”/*”表示所有URL
6.注意事项
a.由于Filter、FilterConfig、FilterChain都是位于javax.servlet包下,并非HTTP包所特有的,所以其中所用到 的请求、响应对象ServletRequest、ServletResponse在使用前都必须先转换成HttpServletRequest、 HttpServletResponse再进行下一步操作。
b.在web.xml中配置Servlet和Servlet过滤器,应该先声明过滤器元素,再声明Servlet元素