最近看了看web过滤器,通过了解源代码,有以下发现,首先过滤器是单例模式,但是过滤器链对象FilterChain是多例的,filters的引用指向这些单例过滤器对象,每次请求都创建一个新的过滤器链对象,初始pos代表运行到的过滤器,n代表过滤器个数。通过pos的改变,获取下一个过滤器,调用过滤方法。执行完过滤器,过滤器链对象会调用servlet。
FilterChain{
filters;
n;
pos;
servlet;
}
最近看了看web过滤器,通过了解源代码,有以下发现,首先过滤器是单例模式,但是过滤器链对象FilterChain是多例的,filters的引用指向这些单例过滤器对象,每次请求都创建一个新的过滤器链对象,初始pos代表运行到的过滤器,n代表过滤器个数。通过pos的改变,获取下一个过滤器,调用过滤方法。执行完过滤器,过滤器链对象会调用servlet。
FilterChain{
filters;
n;
pos;
servlet;
}