过滤器(Filter)
Filter时拦截Request请求的对象:在用户的请求访问资源前处理ServletRequest以及ServletResponse,它可用于日志记录、加解密、session查询、图像文件保护等。
Filter的实现必须继承javax.servlet.Filter接口。这个接口包含了Filter的三个声明周期:init、doFilter、destroy。三个方法定义如下:
void init(FilterConfig filterConfig);
void doFilter(ServletRequest servletRequest, ServletResponse response, FilterChain filterChain);
void destroy();
配置Filter的两种方法:
- 通过@WebFilter注解
使用@WebFilter注解,需要熟悉下列表中的参数,这些参数是在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(filterName = "Test", urlPatterns = {"/*"},
initParams = {
@WebInitParam(name = "frequency", value = "1909"),
@WebInitParam(name = "resolution", value = "1024")
}
)
- 通过部署描述
部署描述中的关键元素:filter、filter-mapping。和上面代码一样功能的部署配置如下:
<filter>
<filter-name>Test</filter-name>
<filter-class>filterClass</filter-class>
<init-param>
<param-name>frequency</param-name>
<param-value>1909</param-value>
</init-param>
<init-param>
<param-name>resolution</param-name>
<param-value>1024</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>TestFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>