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

今天是刘小爱自学Java的第93天 。
感谢你的观看 , 谢谢你 。
话不多说 , 开始今天的学习:
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
一、Filter概述
1JavaSE中的过滤器
在学JavaSE的时候 , 就接触过文件过滤器 , jdk中有一个接口FileFilter 。
利用File这个类面向接口编程 , 能起到一个过滤对应文件的效果 。
因为当初刚接触到面向接口编程这一思想 , 所以我对其做了一个详细的学习 。
结果被人疯狂diss , 其中就有好几个人提到了web中的过滤器 。
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
时至今日 , 53天过去了 , 我终于学到这儿了 。
这两天就仔细学一学这个web里的过滤器 , 看看其到底有何厉害之处 。
2web中的过滤器
Filter , 过滤器的意思 , 在web中是对客户端访问资源的过滤 , 符合条件放行 , 不符合条件过滤 。
在Java里肯定会有一个类或者接口和其对应 , 因为有制定规则的作用 , 在这儿对应的是接口 。
话不多说 , 直接看Filter接口源码:
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
①init()方法
初始化的意思 , 其有一个参数为FilterConfig , 也很好理解 , 初始化的时候需要获取配置信息 。
②doFilter()方法
毫无疑问 , 核心方法就是该方法了 。
具体怎么过滤 , 肯定也就是重写该方法说明了 。
③destroy()方法
摧毁的意思 , 这不用多说 , 当服务器停止运行的时候 , 就会调用该方法 。
二、过滤器两种实现方式
Filter和Servlet一样 , 有xml配置文件和注解开发两种实现方式 。
1xml配置文件
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
①web.xml
这个就和servlet配置是一样的 , 只不过标签名换成了filter 。
filter-name自己定 , 要保证两个是一样的 。
filter-class是自定义类的类名+包名 。
url-pattern即映射路径 , 对应浏览器地址 。
②自定义一个类FilterOne
实现Filter接口 , 这样便能达到一个过滤的效果:web.xml配置信息中的映射路径就被过滤了 。
其中关于FilterChain , 它也是Java中的一个接口 , 源码如下:
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
该接口是Filter接口中的doFilter()方法中的一个参数 , 其中该接口也有一个方法doFilter() 。
注意不要把这两个doFilter()方法弄混了 。
filterChain.doFilter()这段代码的执行也就是放行的意思 , 若是有这段代码 , 过滤将会无效 。
关于FilterChain接口 , 在第三点中会讲解说明 。
③测试
创建两个文件:FilterOne.html和FilterTwo.html , 其中FilterOne.html对应于web.xml中的映射路径 。
当浏览器访问FilterOne.html时 , 没有输出 , 文件被过滤了 。
当浏览器访问FilterTne.html时 , 有输出 , 文件没有被过滤 。
【刘小爱v|Web中的过滤器更厉害?,同样是过滤器】2注解实现方式
刘小爱v|Web中的过滤器更厉害?,同样是过滤器
文章图片
操作步骤和Servlet一样:
右键new , 选择Filter即可 , 这样就能达到一个注解开发的效果 。
方便之处在于:不用在web.xml中填写配置信息了 , 其它的都是一样的 。
刘小爱v|Web中的过滤器更厉害?,同样是过滤器


推荐阅读