在网上无意中看到别人以前提出filter的一些问题, 按照容器的执行顺序 clinet -> filter -> servlet -> filter -> client,一般我们都会看到,客户端发送请求后,有过滤器进行处理,然后请求提交到servlet进行具体业务,之后又有过滤器处理,最终将结果返回客户端。那么很容易发现,在整个过程中,filter经过了两次,但是在实际的开发过程中,我们看到的结果是过滤器仅仅走了一次,怎么回事呢?
其实filter确实只走了一次,只不过临界点不是filter,而是调用doFilter方法,上面的执行过程应该改为:
客户端 -> filter...doFilter -> servlet -> doFilter.. -> 客户端,其实也就是想到与
Filter1 ...
Filter1.doFilter
Filter2 ...
Filter2.doFilter
Filter3 ...
Filter3.doFIlter
Filter3...end
Filter2..end
Filter1...end
详细可以连接责任链模式。