9.2 Filter配置
9.2 Filter配置
当完成Filter的实现后,就可以开始配置Filter了Filter的配置需要如下步骤:
- 确认哪些资源需要使用这个
Filter拦截处理。 - 配置
Filter的初始化参数值,这些参数可以在Filter的init方法中读取到; - 给
Filter取一个名称。一般来说,这个名称没有什么特别的含义,但在一些特殊的情况下,这个名字十分有用。例如,要记录Filter的初始化时间,但这个应用中有许多的Filter,这时它就可以用来识别Filter了。 
FilterConfig接口
getServletContext方法
FilterConfig接口允许通过它的getServletContext的方法来访问ServletContext:
1  | ServletContext getServletContext()  | 
getFilterName方法
如果配置了Filter的名字,在FilterConfig的getFilterName中就可以获取Filter的名字。getFilterName的定义如下:
1  | java.lang.String getFilterName()  | 
获取Filter的初始化参数
当然,最重要的还是要获取到开发者或者运维给Filter配置的初始化参数。为了获取这些初始化参数,需要用到FilterConfig中的两个方法,第一个方法是getParameterNames:
1  | java.util.Enumeration<java.lang.String>  | 
这个方法返回Filter参数名字的Enumeration对象。如果没有给这个Filter配置任何参数,该方法返回的是空的Enumeration对象。
第二个方法是getParameter:
1  | java.lang.String getInitParameter(  | 
配置Filter的两种方法
有两种方法可以配置Filter:一种是通过WebFilter的Annotation来配置Filter,另一种是通过部署描述来注册。
- 使用
@WebFilter的方法,只需要在Filter的实现类中增加一个注解即可,不需要重复地配置部署描述。当然,此时要修改配置参数,就需要重新构建Filter实现类了。 - 使用部署描述意味着修改
Filter配置只要修改一下文本文件就可以了。 
WebFilter的属性
使用@WebFilter,你需要熟悉表9.1中所列出来的参数,这些参数是在WebFilter的Annotation里定义的。所有参数都是可选的。
| 属性 | 描述 | 
|---|---|
asyncSupported | 
Filter是否支持异步操作 | 
description | 
Filter的描述 | 
dispatcerTypes | 
Filter所生效范围 | 
displayName | 
Filter的显示名 | 
filterName | 
Filter的名称 | 
initParams | 
Filter的初始化参数 | 
largeIcon | 
Filter的大图名称 | 
servletName | 
Filter所生效的Servlet名称 | 
smallIcon | 
Filter的小图名称 | 
urlPatterns | 
Filter所生效的URL路径 | 
value | 
Filter所生效的URL路径 | 
举个例子,下述@WebFilter标注配置了一个Filter,该名称为DataCompressionFilter,且适用于所有资源:
1  | 
如果使用部署描述中的filter、filter-mapping元素定义,那么它的内容如下:
1  | <filter>  | 
再举个例子,下述的Filter配置,描述了两个初始化参数:
1  | 
如果使用部署描述中的filter、filter-mapping元素,那么该配置应该为:
1  | <filter>  | 
关于部署描述将在第13章“部署”中讨论。