打好基础——Servlet——过滤器

在Servlet中,过滤器Filter是一个接口,有相对应的doFilter()方法以及它的参数。

doFilter()方法的参数中有个FilterChain接口,里边其实也是一个doFilter方法。

我们可以这样理解:过滤器不单单只有一个,那么我们怎么管理这些过滤器呢?在Java中就使用了链式结构。把所有的过滤器都放在FilterChain里边,如果符合条件,就执行下一个过滤器(如果没有过滤器了,就执行目标资源)。

举个例子:净水器通常有多层的滤芯。

  • 预过滤层:用于去除较大的杂质和悬浮物,如泥沙、锈蚀颗粒和大颗粒的污染物。

  • 活性炭层:用于去除余氯、异味、有机污染物和一些重金属。

  • 超滤层:可以过滤掉较小的颗粒、悬浮物和细菌。这一层有助于去除细菌、病毒和其他微生物。

  • RO(反渗透)膜层:可以有效地去除溶解在水中的离子、微量物质和细菌等。它能够提供高效的除盐和脱硬水效果。

  • 矿化层:某些净水器滤芯还包括矿化层,用于调节水质,增加对人体有益的矿物质的含量。

实际上就是实现Filter接口,重写doFilter()方法),然后以注解/xml配置的方式来部署自己的过滤器。

过滤器其实也是责任链模式的一种实现,FilterChain层层往下执行,直到最后没有过滤器,就到了「目标资源」