过滤器filter简介

过滤器的定义

过滤器,是一个服务器端的组件,用来拦截用户端的请求和相应信息,并对这些信息进行过滤。

Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能

工作原理

  1. 没有过滤器,用户发送请求直接到web资源
  2. 有过滤器,用户发送请求到过滤器,过滤后再发送到web资源,经过处理将资源响应发送到过滤器,再返回给用户
    在这里插入图片描述

生命周期

①服务器启动的时候,web服务器创建Filter的实例对象,并调用其init方法,完成对象的初始化功能。filter对象只会创建一次,init方法也只会执行一次。
②拦截到请求时,执行doFilter方法。可以执行多次。
③服务器关闭时,web服务器销毁Filter的实例对象。
filter的生命周期

web.xml配置

子元素可以设置的值及其意义

  1. REQUEST:当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问时,那么该过滤器就不会被调用。
  2. INCLUDE:如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
  3. FORWARD:如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
  4. ERROR:如果目标资源是通过声明式异常处理机制调用时,那么该过滤器将被调用。除此之外,过滤器不会被调用。

Filter对象——FilterConfig

用户在配置filter时,可以使用为filter配置一些初始化参数,当web容器实例化Filter对象,调用其 init方法时,会把封装了filter初始化参数的filterConfig对象传递进来。

因此开发人员在编写filter时,通过 filterConfig对象的方法,就可获得:

①String getFilterName():得到filter的名称。
②String getInitParameter(String name):返回在部署描述中指定名称的初始化参数的值。如果不存在返回null.
③Enumeration getInitParameterNames():返回过滤器的所有初始化参数的名字的枚举集合。
④public ServletContext getServletContext():返回Servlet上下文对象的引用。

如何实现过滤

Servlet API提供了一个Filter接口,编写的过滤器必须实现该接口。Filter接口中有一个doFilter方法,当开发人员编写好Filter,并配置对哪个web资源进行拦截后,Web服务器每次在调用web资源的service方法之前,都会先调用一下filter的doFilter方法,因此,在该方法内编写代码可达到过滤的目的

过滤器链——FilterChain

一个web应用中有很多个过滤器对某些web资源进行拦截,那么这组过滤器就称为过滤器链。过滤器的执行顺序和有关(谁在前先执行谁)和过滤器在web.xml文件中的配置顺序无关。
在这里插入图片描述

Filter开发两步走

①编写java类实现Filter接口,并实现其doFilter方法。
②在web.xml文件中对编写的filter类进行注册,并设置它所能拦截的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值