Abh*_*war 9 java java-ee servlet-filters
我试图理解过滤器链接.正如这个问题所定义的那样
所有过滤器都是链接的(按照web.xml中的定义顺序).chain.doFilter()正在进入链中的下一个元素.链的最后一个元素是目标资源/ servlet.
我有兴趣知道容器中的场景背后容器如何处理过滤器链接.有人可以解释如何在容器内处理过滤器链接?
Spa*_*kOn 25
每个过滤器实现了javax.servlet.Filter接口,其包括doFilter()其作为输入的方法request和response pair along with a filter chain实现该,这是一类(由servlet容器提供的)的一个实例javax.servlet.FilterChain的接口.过滤器链反映过滤器的顺序.The servlet container,根据web.xml文件中的配置顺序,filters为servlet已filters映射到它的任何或其他资源构造链.对于链中的每个过滤器,传递给它的过滤器链对象表示要按顺序调用的剩余过滤器,后跟目标servlet.
filters例如,如果有两个,那么这个机制的关键步骤如下:
1. servlet要求目标.在container检测到有两个filters和创建filter chain.
2. filter链中的第一个由其doFilter()方法调用.
3.第一个filter完成任何预处理,然后调用doFilter()方法filter chain.这导致第二个filter被其doFilter()方法调用.
第二个filter完成任何预处理,然后调用doFilter()方法filter chain.这导致目标servlet被其service()方法调用.
5.当目标servlet完成时,doFilter()第二个链中的链调用filter返回,第二个filter可以进行任何后处理.
6.当第二个filter完成时,第一个链doFilter()中的链调用filter返回,第一个filter可以进行任何后处理.
7.第一次filter完成后,执行完成.
可以在servlet和servlet容器之间插入过滤器,以包装和预处理请求,或者包装和后处理响应.没有过滤器知道他们的订单.根据在web.xml中配置过滤器的顺序,完全通过过滤器链处理排序
| 归档时间: |
|
| 查看次数: |
9532 次 |
| 最近记录: |