Filter过滤器

功能:对Servlet容器调用Servlet的过程进行拦截,从而在Servlet进行响应处理的前后实现特殊的功能。
三个Filterr接口:
Filter 、FilterChain、FilterConfig
Filter程序是一个实现Filter接口的Java类,与Servlet程序相似,它由Servlet容器进行调用和执行。
Filter程序需要在web.xml文件进行注册和设置它所能拦截的资源:Filter程序可以拦截JSP、Servlet、静态文件和静态html文件。
Filter的过滤过程
在这里插入图片描述
在这里插入图片描述
工作原理
当在 web.xml 中注册了一个 Filter 来对某个 Servlet 程序进行拦截处理时,这个 Filter 就成了 Servlet 容器与该 Servlet 程序的通信线路上的一道关卡,该 Filter 可以对 Servlet 容器发送给 Servlet 程序的请求和 Servlet 程序回送给 Servlet 容器的响应进行拦截,可以决定是否将请求继续传递给 Servlet 程序,以及对请求和响应信息是否进行修改。
在一个web应用程序中可以注册多个Filter程序,每个Filter程序都可以对一个或一组Servlet程序进行拦截。
若有多个Filter程序对某个Servlet程序的访问过程进行拦截,当针对该Servlet的访问请求到达时,web容器将把多个Filter程序组合成一个Filter链(过滤器链)。Filter联众各个Filter的拦截顺序与他们在web.xm中映射的顺序一致。
Filter链的基本工作原理
在这里插入图片描述

Filter接口
init:在web容器创建Filter对象实例后,立即调用该Filter对象的init方法。Init方法在Filter生命周期中仅执行一次。
destroy:在web容器卸载Filter对象之前调用。该方法在Fileter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
doFilter:类似于Servlet接口中的service()方法。当客户端请求目标资源的时候,容器就会调用与这个目标资源相关联的过滤器大的doFilter()方法。
其中参数request、response为web容器或Filter链的上一个Filter传过来的请求和响应参数。

FilterChain接口
代表当前Filter链的对象。由容器实现、容器将其实例作为参数传入过滤器对象的doFilter()方法中。过滤器对象使用FilterChain对象调用过滤器链中的下一个过滤器,如果该过滤器使链中的最后一个过滤器,那么将调用目标资源。

FilterConfig接口
该类接口类似于ServletConfig接口,由容器实现。Servlet规范将代表servletContext对象和Filter的配置参数信息都封装在该对象中。Servlet容器将其作为参数传入过滤器对象的init()方法中。

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

过滤器的部署

 <!-- 注册filter -->
<filter>
 <!-- Filter名 -->
    <filter-name>oneFilter</filter-name>
    <!-- Filter全类名 -->
    <filter-class>com.gcz.filter.OneFilter</filter-class>
    <!-- 设置过滤器的编码集 -->
    <init-param>
      <param-name>encoding</param-name>
      <param-value>utf-8</param-value>
    </init-param>
  </filter>
  <!-- Filter映射路径 -->
  <filter-mapping>
    <filter-name>oneFilter</filter-name>
    <url-pattern>/one</url-pattern>
  </filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值