过滤器入门
获取中... 获取中...
什么是过滤器
过滤器是Servlet的高级特性之一,也别把它想得那么高深,只不过是实现Filter接口的Java类罢了!
首先,我们来看看过滤器究竟Web容器的哪处:
从上面的图我们可以发现,当浏览器发送请求给服务器的时候,先执行过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。。
我们很容易发现,过滤器可以比喻成一张滤网。我们想想现实中的滤网可以做什么:在泡茶的时候,过滤掉茶叶。那滤网是怎么过滤茶叶的呢?规定大小的网孔,只要网孔比茶叶小,就可以实现过滤了!
引申在Web容器中,过滤器可以做:过滤一些敏感的字符串【规定不能出现敏感字符串】、避免中文乱码【规定Web资源都使用UTF-8编码】、权限验证【规定只有带Session或Cookie的浏览器,才能访问web资源】等等等,过滤器的作用非常大,只要发挥想象就可以有意想不到的效果
也就是说:当需要限制用户访问某些资源时、在处理请求时提前处理某些资源、服务器响应的内容对其进行处理再返回、我们就是用过滤器来完成的!
过滤器本身的样子
- 实现Filter接口的Java类就被称作为过滤器
1 | public class FilterDemo1 implements Filter { |
注册过滤器
第一种方式
<filter>
用于注册过滤器
1 | <filter> |
<filter-name>
用于为过滤器指定一个名字,该元素的内容不能为空。<filter-class>
元素用于指定过滤器的完整的限定类名。<init-param>
元素用于为过滤器指定初始化参数,它的子元素指定参数的名字, <param-value>
指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。
filter-mapping
<filter-mapping>
元素用于设置一个Filter 所负责拦截的资源。
一个Filter拦截的资源可通过两种方式来指定:Servlet 名称和资源访问的请求路径
1 | <filter-mapping> |
<filter-name>
子元素用于设置filter的注册名称。该值必须是在元素中声明过的过滤器的名字 <url-pattern>
设置 filter 所拦截的请求路径(过滤器关联的URL样式)<servlet-name>
指定过滤器所拦截的Servlet名称。<dispatcher>
指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个<dispatcher>
子元素用来指定 Filter 对资源的多种调用方式进行拦截。
第二种方式
1 |
上面的配置是“/*”,所有的Web资源都需要途径过滤器
如果想要部分的Web资源进行过滤器过滤则需要指定Web资源的名称即可!
过滤器应用
- filter的三种典型应用:
- 1、可以在filter中根据条件决定是否调用chain.doFilter(request, response)方法,即是否让目标资源执行
- 2、在让目标资源执行之前,可以对requestresponse作预处理,再让目标资源执行
- 3、在目标资源执行之后,可以捕获目标资源的执行结果,从而实现一些特殊的功能
本文由 rufus 创作,采用 知识共享署名 4.0 国际许可协议。
本站文章除注明转载/出处外,均为本站原创或翻译,转载请务必署名。