Filter的生命周期同servlet的生命周期是一样的。它们都提供了init(FilterConfig arg0)和destroy()方法来控制。当web容器(如Tomcat、Jboss等)启动的时候,就会自动调用init(FilterConfig arg0)来对filter进行初始化,当关闭web容器,关机,或者reload整个应用时,都会调用destroy()来关闭filter。也就是说,当web容器启动时,filter就被加载到内存,并在destroy()调用之前都常驻内存。Filter只会初始化一次,web容器过滤的时候,都是调用同一个Filter!
发送Http请求——》服务器处理——》返回数据到客户端(浏览器),在这个过程中,都是在同一个线程中处理的!所以可以通过ThreadLocal来实现请求上下文,见博客:http://blog.csdn.net/yh_zeng2/article/details/73611819
下面通过demo来看看Filter的生命周期:
TestFilter.java:
package filter;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class TestFilter implements Filter{
@Override
public void destroy() {
System.out.println("调用TestFilter.destroy(),TestFi