Chain.doFilter在Filter.doFilter方法中做什么?

问题描述 投票:39回答:6

Filter.doFilter方法中,我打电话给了Filter.doFilter

chain.doFilterchain.doFilter内部做什么?这不是递归调用吗?

java servlet-filters
6个回答
54
投票

Servlet过滤器是doFilter设计模式的实现。

所有过滤器均已链接(按照web.xml中其定义的顺序)。 doFilter进入链中的下一个元素。链的最后一个元素是目标资源/ servlet。


15
投票

它正在调用Chain of responsibility对象的chain.doFilter()方法,而不是本身,因此,它不会递归。

名称doFilter建议您有一个过滤器序列,每个过滤器进行一些处理,然后依次传递到下一个过滤器,因此每个对象都有一个chain成员指向该序列中的下一个过滤器,它在过滤器执行了自己的处理后被调用。然后,序列中的最后一个将以chain作为chain值,或者它自己知道它是序列中的最后一个。


2
投票

内部在过滤器链中调用下一个过滤器的null,并且当链结束时,它将调用目标servlet。


2
投票

没有您正在谈论的任何代码,我只能假定您类似:


1
投票

通过调用chain.doFilter,您将请求/响应传递到过滤器链中的下一个过滤器。如果不调用它,则将不执行下一个过滤器(可能在web.xml中定义)。


1
投票

导致要调用链中的下一个过滤器,或者如果调用过滤器是链中的最后一个过滤器,则导致要调用链末尾的资源。

© www.soinside.com 2019 - 2024. All rights reserved.