filter的生命周期?
Filter 的生命周期主要包含三个阶段:初始化、请求处理和销毁。
- 初始化:当 web 应用启动时,容器会创建并初始化 Filter 对象。这个过程中,
init(FilterConfig)
方法会被调用一次。FilterConfig
对象包含了 Filter 的配置信息,比如初始参数。在init
方法中,你可以执行一些只需要进行一次的操作,例如加载配置或初始化资源。
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化操作
System.out.println("Filter initialized");
}
- 请求处理:每当一个请求到达 Filter 的映射路径时,
doFilter
方法就会被调用。这是 Filter 的核心方法,你可以在这里执行诸如检查用户身份、修改请求或响应等操作。此外,你需要调用FilterChain.doFilter
方法来将请求传递给 Filter 链中的下一个 Filter 或 Servlet。
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
// 请求处理
System.out.println("Filter processing request");
chain.doFilter(request, response);
}
- 销毁:当 web 应用关闭时,容器会销毁 Filter 对象,
destroy
方法会被调用一次。这是在 Filter 生命周期结束时释放资源的地方。
public void destroy() {
// 释放资源
System.out.println("Filter destroyed");
}
需要注意的是,虽然 Filter 的生命周期方法(init
和 destroy
)只会被调用一次,但是 doFilter
方法会被多次调用,每次请求都会触发。因此,Filter 必须能够在多线程环境下安全地执行。