在Filter.doFilter
方法中,我打电话给了Filter.doFilter
。
chain.doFilter
在chain.doFilter
内部做什么?这不是递归调用吗?
Servlet过滤器是doFilter
设计模式的实现。
所有过滤器均已链接(按照web.xml中其定义的顺序)。 doFilter
进入链中的下一个元素。链的最后一个元素是目标资源/ servlet。
它正在调用Chain of responsibility对象的chain.doFilter()
方法,而不是本身,因此,它不会递归。
名称doFilter
建议您有一个过滤器序列,每个过滤器进行一些处理,然后依次传递到下一个过滤器,因此每个对象都有一个chain
成员指向该序列中的下一个过滤器,它在过滤器执行了自己的处理后被调用。然后,序列中的最后一个将以chain
作为chain
值,或者它自己知道它是序列中的最后一个。
内部在过滤器链中调用下一个过滤器的null
,并且当链结束时,它将调用目标servlet。
没有您正在谈论的任何代码,我只能假定您类似:
通过调用chain.doFilter,您将请求/响应传递到过滤器链中的下一个过滤器。如果不调用它,则将不执行下一个过滤器(可能在web.xml中定义)。
导致要调用链中的下一个过滤器,或者如果调用过滤器是链中的最后一个过滤器,则导致要调用链末尾的资源。