Filter(过滤器)

一、Filter 的基本功能是对 Servlet 容器调用 Servlet 的过程进行拦截,从而在 Servlet 进 行响应处理的前后实现一些特殊的功能。
在 Servlet API 中定义了三个接口类供开发人员编写 Filter 程序:Filter, FilterChain, FilterConfig。
Filter 程序是一个实现了 Filter 接口的 Java 类,与 Servlet 程序相似,它由 Servlet 容 器进行调用和执行。

二、过滤过程
在这里插入图片描述

Filter 可以对 Servlet 容器发送给 Servlet 程序的请求和 Servlet 程序回送给 Servlet 容器的响应进行拦截,可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响 应信息是否进行修改。

三、过滤链
一个web应用中可以有多个Filter过滤器,每个过滤器都可以对对一个或一组 Servlet 程序进行拦截。若有多个 Filter 程序对某个 Servlet 程序的访问过程进行拦截,当针对该 Servlet 的访问请求到达时,web 容器将把这多个 Filter 程序组合成一个 Filter 链(过滤器链)。Filter 链中各个 Filter 的拦截顺序与它们在应用程序的web.xml 中映射的顺序一致。
如图所示

四、Filter 接口
创建过滤器:实现Filter接口,实现方法 init、 doFilter 、destroy
过滤器也是单实例,只创建一次
创建过滤器时机:当服务器加载web时就创建过滤器

init(FilterConfig filterConfig)throws ServletException:
Web容器创建 Filter 对象实例后,将立即调用该 Filter 对象的 init 方法。Init 方法在 Filter 生命周期中仅执行一次。

doFilter(ServletRequest request, ServletResponse response, FilterChain chain):
每次请求都会创建doFilter方法
参数 chain 为代表当前 Filter 链的对象,在特定的操作完成后,可以在当前 Filter 对象的 doFilter 方法内部需要调用 FilterChain 对象的 chain.doFilter(request,response)方法才能把请求交付给 Filter 链中的下一个 Filter 或者目标 Servlet 程序去处理

destroy(): 当web服务器加卸载web应用时、当服务器停止时、当重新加载web应用时被调用。该方法在Filter的生命周期中仅执行一次。

五、过滤器的部署
在实现一个过滤器后,需要在 web.xml 中进行注册和设置它所能拦截的资源。这可以 通过 filter 和 filter-mapping 元素来完成的。

<filter>
    <filter-name>twoFilter</filter-name>
    <filter-class>com.hpe.filter.TwoFilter</filter-class>
    </filter>
    <filter-mapping>
    <filter-name>twoFilter</filter-name>
    <url-pattern>/one</url-pattern>
</filter-mapping>

元素用于在Web应用程序中注册一个过滤器。
在 filter 元素内
用于为过滤器指定一个名字,该元素的内容不能为空。
元素用于指定过滤器的完整的限定类名。
元素用于为过滤器指定初始化参数,它的子元素指定参数的名字,指定参数的值。在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。

<filter>
<!-- <filter-name> 用于为过滤器指定一个名字,该元素的内容不能为空-->
    <filter-name>oneFilter</filter-name>
    <!--<filter-class>元素用于指定过滤器的完整的限定类名。-->
    <filter-class>com.hpe.filter.OneFilter</filter-class>
    <!--<init-param>元素用于为过滤器指定初始化参数-->
    <init-param>
    <!--<param-name>指定参数的名字,<param-value>指定参数的值-->
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
<!--在过滤器中,可以使用FilterConfig接口对象来访问初始化参数。-->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值