刘小爱v|Web中的过滤器更厉害?,同样是过滤器( 二 )


文章图片
其中关于FilterChain的doFilter()方法
不写doFilter()方法 , 文件访问不到 , 被拦截 。
写doFilter()方法 , 文件可以访问 , 被放行 。
所以doFilter()具有放行的作用 。
三、过滤器的执行流程
同一路径下是不能对应多个Servlet的 , 那同一路径下可以对应多个Filter么?
答案是可以的 , 其实也好理解 , 就是多个过滤条件判断得到一个结果 。
那么它们的执行流程又是怎么样的呢?
就得弄懂FilterChain接口及其doFilter()的作用了 。 先写代码做一个测试:
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
①三个过滤器
我创建了FilterA、FilterB、FilterC三个过滤器 , 上图中只展示了一个 。
在代码中编写两条输出语句用来判断执行顺序 , 以FilterChain的doFilter()方法为界 。
②过滤器要过滤的资源
前面用的是一个html文件作为被过滤的资源 , 其实Servlet也可以作为被过滤的资源 。
其路径和三个过滤器路径一致 。
代码测试:
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
根据运行结果我们可以判断其执行顺序是按照英文字母顺序排列的 , 所以FilterA在前面 。
至于对FilterChain的理解:
Chain本身就有链条的意思 , 以FilterChain的doFilter()方法为界限 , 其执行流程就像是链条一样 。
这样一画图说明 , 是不是也就好理解了呢?
最后
谢谢你的观看 。
如果可以的话 , 麻烦帮忙点个赞 , 谢谢你 。