1.过滤器简介
- web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
- 过滤器的作用:一般用于完成通用的操作。如:登陆验证,统一编码处理,敏感字符过滤……
- 工作原理:只要在web.xml文件配置好要拦截的客户端请求,它就会帮你拦截到请求,此时就可以对请求或响应统一设置编码,简化操作;同时还可以进行逻辑判断,如用户是否已经登录,有没有权限访问该页面等工作。它是随你的web应用启动而启动的,只要初始化一次,以后就可以拦截相关请求,只有当你的web应用停止或重新部署的时候才销毁。
2.快速入门
1)使用过滤器的步骤
- 定义一个类,实现接口Filter
- 覆写方法
- 配置拦截路径 ①web.xml ②注解
2)代码
@WebFilter("/*")//访问所有资源之前,都会执行该过滤器
public class FilterDemo implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
chain.doFilter(req, resp);
}
public void init(FilterConfig config) throws ServletException {
}
}
3.过滤器细节
1)web.xml配置
2)过滤器执行流程
- 执行过滤器
- 执行放行后的资源
- 回来执行过滤器放行代码下面的代码
3)过滤器生命周期方法
- init() :在服务器启动后,会创建Filter对象,然后调用init方法,用于加载资源
- doFilter() :在每一次请求被拦截时,会执行,可以执行多次。
- destroy() :在服务器关闭后,Filter对象被销毁,如果服务器是正常关闭,则会执行destroy方法,只会执行一次,用于释放资源。
4)过滤器配置详解
5)过滤器链(配置多个过滤器)
①执行顺序:如何有两个过滤器:过滤器1和过滤器2
- 过滤器1
- 过滤器2
- 资源执行
- 过滤器2
- 过滤器1
②过滤器先后顺序问题
- 注解配置:按照类名的字符串比较规则比较,值小的先执行
- web.xml配置:<filter-mapping>谁定义在上边,谁先执行。