- 过滤器实际上就是对web资源进行拦截,做一些处理后再交给下一个过滤器或servlet处理。
- 通常都是用来拦截request进行处理的,也可以对返回的response进行拦截处理。
- 自动登录
- 统一设置编码格式
- 访问权限控制
- 铭感字符过滤等
- 创建完成之后,直接使用@WebFilter注解,不用去web.xmi中进行配置了。
- 创建完成的过滤器实现了Filter接口,实现了3个方法。
package filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter(filterName = "CharsetFilter")
public class CharsetFilter implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);//交给下一个过滤器或servlet处理
}
public void init(FilterConfig config) throws ServletException {
}
}
4.配置Filter
常用配置项
(1) urlPatterns
- 配置要拦截的资源:
- 以指定资源匹配。例如"/index.jsp"
- 以目录匹配。例如"/servlet/*"
- 以后缀名匹配。例如"*.jsp"
- 通配符,拦截所有web资源。例如"/*"
(2) initParams
- 配置初始化参数,跟Servlet配置一样。
- 例如:initParams = { @WebInitParam(name = "key",value = "value") }
(3) dispatcherTypes
-
配置拦截的类型,可配置多个。默认为DispatcherType.REQUEST
-
例如:
-
dispatcherTypes = {DispatcherType.ASYNC,DispatcherType.ERROR}
-
其中DispatcherType是个枚举类型,有以下几个值:
-
FORWARD,//转发的 INCLUDE,//包含在页面的 REQUEST,//请求的 ASYNC,//异步的 ERROR;//出错的
注:过滤器是在服务器启动时就会创建的,只会创建一个实例,常驻内存,也就是说服务器一启动就会执行Filter的init(FilterConfig config)方法. 当Filter被移除或服务器正常关闭时,会执行destroy方法。
- 在我们的请求到达Servle之间是可以经过多个Filter的,一般来说,建议Filter之间不要有关联,各自处理各自的逻辑即可。这样,我们也无需关心执行顺序问题。
如果一定要确保执行顺序,就要对配置进行修改了,执行顺序如下: - 在web.xml中,filter执行顺序跟的顺序有关,先声明的先执行。
- 使用注解配置的话,filter的执行顺序跟名称的字母顺序有关,例如AFilter会比BFilter先执行。
- 如果既有在web.xml中声明的Filter,也有通过注解配置的Filter,那么会优先执行web.xml中配置的Filter。



