JavaWeb过滤器(Filter)

开发工具与关键技术:javaWeb,过滤器(Filter)
撰写时间:2019-05-26

总结下述所有表达
第一点:过滤器是什么
第二点:客户端到服务端的流程
第三点:过滤器如何编写
第四点:Filter接口的生命周期及方法执行时期
第五点:三个方法中的重要参数了解及理解doFilter
第六点:web.xml的配置及四种拦截方式
第七点:目标资源与过滤器的执行顺序
第八点:多个过滤器的执行顺序
第九点:过滤器的应用场景

过滤器是什么
通俗的说就是过滤,就如一台带有过滤功能的饮水机,里面就会有个过滤器,无论是什么物质都需要经过这个顾虑器。让这个饮水机的过滤器去把水与其他的杂物区分开来。
Java的过滤器也是一样,我们可以自己在一个没有过滤器的程序里面加上过滤器,同时可以选择拦截下什么资源,放行什么资源。
过滤器可以有一个或者多个。多个过滤器也就是为了,更好的分配过滤器的工作,什么情况下使用到这个过滤器,但是有一点就是,程序是每一个过滤器都会经过,但不一定会拦截。
客户端到服务端在回到客户端的程序。(如下图)
JavaWeb过滤器(Filter)_第1张图片
解释上图
从客户端发送请求,到过滤器,如果被这个过滤器拦截下来了,就不会继续访问下一个过滤器了,而是执行其他功能,或者不执行。
过滤器如何编写
1、 过滤器(Filter接口)是一个接口,所以需要一个实现这个接口的类。
2、 配置:在web.xml文件中配置,配置之后才会有效果,就如servlet一样。
Filter接口的生命周期
先实例到实现,并初始化(init())到使用(doFilter())到关闭之前(destroy())
init(FilterConfig)
什么执行:创建Filter之后,马上执行;
什么时候创建呢:Filter会在服务器启动时就创建
doFilter(ServletRequest,ServletResponse,FilterChain)
什么时候执行:每次过滤时都会执行
destroy()
什么时候执行:在销毁之前执行
什么时候销毁呢:在服务器关闭时销毁
三个方法测试结果总结
当启动服务器时init方法马上执行了(在还没打开网页前已经执行了)
在过滤时(网页刷新时)才运行doFilter方法
当关掉服务器时执行destroy方法,就是当你点击关闭服务器是,就在执行了,伴随关闭一起执行

三个方法中的重要参数了解
JavaWeb过滤器(Filter)_第2张图片
理解doFilter
Filter接口下有个doFilter方法,这个方法的参数是有三个,而doFilter参数中有个参数是FilterChain,FilterChain中有个方法也是doFilter,单这个方法的参数只有两个。这个就是区别
Filter接口的doFilter方法是每次过滤都会被调用
FilterChain的doFilter方法是用来放行。

web.xml的配置
配置与servlet的几乎相同,就是多了个dispatcher标签。
JavaWeb过滤器(Filter)_第3张图片
过滤器的四种拦截方式:REQUEST 是默认的,当输入其他的,那么默认的将取消(消失)。
请求(拦的是直接请求,不拦转发请求):REQUEST
转发(专门拦转发):FORWARD
包含(专门拦包含):INCLUDE
错误(专门拦错误):ERROR
小提醒:以上四种都是专门拦截的,不拦转发后的请求,所以使用的时候要注意灵活应用。
过滤器与目标资源执行顺序
FilterChain#doFilter()方法;
执行目标资源,或是执行下一个过滤器!如果没有下一个过滤器那么执行的是目标资源,如果有,那么执行下一个过滤器。

多个过滤器的执行顺序
的配置顺序决定了过滤器的执行顺序
就是哪个文件在第一个,谁就是第一个执行。
JavaWeb过滤器(Filter)_第4张图片

过滤器的应用场景
1、执行目标资源之前做预处理工作,例如设置编码,这种通常都会放行,只是在目标资源执行之前做一下准备工作。
例如放行 :几乎所有的servlet中都需要写request.setCharacterEndoin()可以把它放入到一个Filter中
2、通过条件判断是否放行,例如效验当前用户是否已经登录,或者用户IP是否已经被禁用;
3、在目标资源执行后,做一些后续的特殊处理工作,例如把目标资源输出的数据进行处理;(回程拦截)

你可能感兴趣的:(Javaweb)