【JavaWeb】93:web中的过滤器
今天是刘小爱自学Java的第93天。
感谢你的观看,谢谢你。
话不多说,开始今天的学习:
image
一、Filter概述
1JavaSE中的过滤器
在学JavaSE的时候,就接触过文件过滤器,jdk中有一个接口FileFilter。
利用File这个类面向接口编程,能起到一个过滤对应文件的效果。
由于当初刚接触到面向接口编程这一思想,所以我对其做了一个详细的学习。
结果被人疯狂diss,其中就有好几个人提到了web中的过滤器。
image
时至今日,53天过去了,我终于学到这儿了。
这两天就仔细学一学这个web里的过滤器,看看其究竟有何厉害之处。
2web中的过滤器
Filter,过滤器的意思,在web中是对用户端访问资源的过滤,符合条件放行,不符合条件过滤。
在Java里一定会有一个类或者者接口和其对应,由于有制定规则的作用,在这儿对应的是接口。
话不多说,直接看Filter接口源码:
image
①init()方法
初始化的意思,其有一个参数为FilterConfig,也很好了解,初始化的时候需要获取配置信息。
②doFilter()方法
毫无疑问,核心方法就是该方法了。
具体怎样过滤,一定也就是重写该方法说明了。
③destroy()方法
摧毁的意思,这不用多说,当服务器中止运行的时候,就会调用该方法。
二、过滤器两种实现方式
Filter和Servlet一样,有xml配置文件和注解开发两种实现方式。
1xml配置文件
image
①web.xml
这个就和servlet配置是一样的,只不过标签名换成了filter。
- filter-name自己定,要保证两个是一样的。
- filter-class是自己设置类的类名+包名。
- url-pattern即映射路径,对应浏览器地址。
②自己设置一个类FilterOne
实现Filter接口,这样便能达到一个过滤的效果:web.xml配置信息中的映射路径就被过滤了。
其中关于FilterChain,它也是Java中的一个接口,源码如下:
image
该接口是Filter接口中的doFilter()方法中的一个参数,其中该接口也有一个方法doFilter()。
注意不要把这两个doFilter()方法弄混了。
filterChain.doFilter()这段代码的执行也就是放行的意思,若是有这段代码,过滤将会无效。
关于FilterChain接口,在第三点中会讲解说明。
③测试
创立两个文件:FilterOne.html和FilterTwo.html,其中FilterOne.html对应于web.xml中的映射路径。
- 当浏览器访问FilterOne.html时,没有输出,文件被过滤了。
- 当浏览器访问FilterTne.html时,有输出,文件没有被过滤。
2注解实现方式
image
操作步骤和Servlet一样:
右键new,选择Filter就可,这样就能达到一个注解开发的效果。
方便之处在于:不用在web.xml中填写配置信息了,其它的都是一样的。
image
其中关于FilterChain的doFilter()方法
- 不写doFilter()方法,文件访问不到,被阻拦。
- 写doFilter()方法,文件可以访问,被放行。
- 所以doFilter()具备放行的作用。
三、过滤器的执行流程
同一路径下是不能对应多个Servlet的,那同一路径下可以对应多个Filter么?
答案是可以的,其实也好了解,就是多个过滤条件判断得到一个结果。
那么它们的执行流程又是怎样样的呢?
就得弄懂FilterChain接口及其doFilter()的作用了。先写代码做一个测试:
image
①三个过滤器
我创立了FilterA、FilterB、FilterC三个过滤器,上图中只展现了一个。
在代码中编写两条输出语句用来判断执行顺序,以FilterChain的doFilter()方法为界。
②过滤器要过滤的资源
前面用的是一个html文件作为被过滤的资源,其实Servlet也可以作为被过滤的资源。
其路径和三个过滤器路径一致。
代码测试:
image
根据运行结果我们可以判断其执行顺序是按照英文字母顺序排列的,所以FilterA在前面。
至于对FilterChain的了解:
Chain本身就有链条的意思,以FilterChain的doFilter()方法为界限,其执行流程就像是链条一样。
这样一画图说明,是不是也更好了解了呢?
最后
谢谢你的观看。
假如可以的话,麻烦帮忙点个赞,谢谢你。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » 【JavaWeb】93:web中的过滤器