前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【JavaWeb】93:web中的过滤器

【JavaWeb】93:web中的过滤器

作者头像
刘小爱
发布2020-07-30 10:08:59
3990
发布2020-07-30 10:08:59
举报
文章被收录于专栏:零基础自学Java零基础自学Java

今天是刘小爱自学Java的第93天。

感谢你的观看,谢谢你。

话不多说,开始今天的学习:

一、Filter概述

1JavaSE中的过滤器

在学JavaSE的时候,就接触过文件过滤器,jdk中有一个接口FileFilter。

利用File这个类面向接口编程,能起到一个过滤对应文件的效果。

因为当初刚接触到面向接口编程这一思想,所以我对其做了一个详细的学习。

结果被人疯狂diss,其中就有好几个人提到了web中的过滤器。

时至今日,53天过去了,我终于学到这儿了。

这两天就仔细学一学这个web里的过滤器,看看其到底有何厉害之处。

2web中的过滤器

Filter,过滤器的意思,在web中是对客户端访问资源的过滤,符合条件放行,不符合条件过滤。

在Java里肯定会有一个类或者接口和其对应,因为有制定规则的作用,在这儿对应的是接口。

话不多说,直接看Filter接口源码:

①init()方法

初始化的意思,其有一个参数为FilterConfig,也很好理解,初始化的时候需要获取配置信息。

②doFilter()方法

毫无疑问,核心方法就是该方法了。

具体怎么过滤,肯定也就是重写该方法说明了。

③destroy()方法

摧毁的意思,这不用多说,当服务器停止运行的时候,就会调用该方法。

二、过滤器两种实现方式

Filter和Servlet一样,有xml配置文件和注解开发两种实现方式。

1xml配置文件

①web.xml

这个就和servlet配置是一样的,只不过标签名换成了filter。

  • filter-name自己定,要保证两个是一样的。
  • filter-class是自定义类的类名+包名。
  • url-pattern即映射路径,对应浏览器地址。

②自定义一个类FilterOne

实现Filter接口,这样便能达到一个过滤的效果:web.xml配置信息中的映射路径就被过滤了。

其中关于FilterChain,它也是Java中的一个接口,源码如下:

该接口是Filter接口中的doFilter()方法中的一个参数,其中该接口也有一个方法doFilter()。

注意不要把这两个doFilter()方法弄混了。

filterChain.doFilter()这段代码的执行也就是放行的意思,若是有这段代码,过滤将会无效。

关于FilterChain接口,在第三点中会讲解说明。

③测试

创建两个文件:FilterOne.html和FilterTwo.html,其中FilterOne.html对应于web.xml中的映射路径。

  • 当浏览器访问FilterOne.html时,没有输出,文件被过滤了。
  • 当浏览器访问FilterTne.html时,有输出,文件没有被过滤。

2注解实现方式

操作步骤和Servlet一样:

右键new,选择Filter即可,这样就能达到一个注解开发的效果。

方便之处在于:不用在web.xml中填写配置信息了,其它的都是一样的。

其中关于FilterChain的doFilter()方法

  • 不写doFilter()方法,文件访问不到,被拦截。
  • 写doFilter()方法,文件可以访问,被放行。
  • 所以doFilter()具有放行的作用。

三、过滤器的执行流程

同一路径下是不能对应多个Servlet的,那同一路径下可以对应多个Filter么?

答案是可以的,其实也好理解,就是多个过滤条件判断得到一个结果。

那么它们的执行流程又是怎么样的呢?

就得弄懂FilterChain接口及其doFilter()的作用了。先写代码做一个测试:

①三个过滤器

我创建了FilterA、FilterB、FilterC三个过滤器,上图中只展示了一个。

在代码中编写两条输出语句用来判断执行顺序,以FilterChain的doFilter()方法为界。

②过滤器要过滤的资源

前面用的是一个html文件作为被过滤的资源,其实Servlet也可以作为被过滤的资源。

其路径和三个过滤器路径一致。

代码测试:

根据运行结果我们可以判断其执行顺序是按照英文字母顺序排列的,所以FilterA在前面。

至于对FilterChain的理解:

Chain本身就有链条的意思,以FilterChain的doFilter()方法为界限,其执行流程就像是链条一样。

这样一画图说明,是不是也更好理解了呢?

最后

谢谢你的观看。

如果可以的话,麻烦帮忙点个赞,谢谢你。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 刘小爱 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、Filter概述
  • 二、过滤器两种实现方式
  • 三、过滤器的执行流程
  • 最后
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档