过滤器的概念与使用


过滤器:
 过滤器是向web应用程序的请求和响应添加功能的组件。它
      可以在原始的数据与目标之间进行过滤。

过滤器的工作原理,包括下面几步:
 1.用户访问Web资源的时候,发送的请求会先经过过滤器。
 2.由Web容器对请求数据进行过滤处理。
 3.经过过滤的请求数据被发送至目标资源进行处理。
 4.目标资源处理后的响应被发送到过滤器。
 5.经过过滤器的过滤后,将响应返回客户端。

过滤器的应用场合:
 对请求和响应进行统一处理。
 对请求进行日志记录和审核。
 对数据进行屏蔽和替换。
 对数据进行加密和解密。

过滤器的生命周期:
 1.实例化。---访问Web资源前,Web容器负责创建过滤器的实列来完成过滤器的实例化得工作,实例化只做一次。
 2.初始化。---在进行过滤前会调用init()方法来实现初始化操作。
 3.执行过滤。调用doFilter()方法实现过滤器的特定功能。在doFilter()有效期内,doFilter()方法可以反复的调用。
 4.销毁。由Web容器调用destory()方法,通过调用destory()方法实现将过滤器所占资源释放。

过滤器的使用步骤:
 1.创建实现Filter接口的类。
 2.在doFilter()中编写实现过滤器的方法。
 3.调用下一个过滤器或者Web资源。
 4.在web.xml文件中配置过滤器。

 示列:
 public class CharacterEncodingFilter implements Filter {

  //进行字符编码的设置
  public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   //设置请求时的编码方式
   request.setCharacterEncoding("UTF-8");
   //设置响应时的编码方式
   response.setCharacterEncoding("UTF-8");
   //调用Web资源,也可以调用其它过滤器,必须编写这段代码。
   chain.doFilter(request, response);
  }

 }


 <filter>
      <display-name>CharacterEncodingFilter</display-name>
      <filter-name>CharacterEncodingFilter</filter-name>
      <filter-class>com.pb.news.web.filter.CharacterEncodingFilter</filter-class>
   </filter>
   <filter-mapping>
      <filter-name>CharacterEncodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
   </filter-mapping>

  <url-pattern>元素表示:过滤器映射的Web资源。
  配置方式:
   精确匹配:<url-pattern>/xxx</url-pattern>
   目录匹配:<url-pattern>/admin/*</url-pattern>
   扩展名匹配:<url-pattern>*.do</url-pattern>
   全部匹配:<url-pattern>/*</url-pattern>
  匹配的顺序就是:先精确匹配,目录匹配,扩展名匹配,最后全部匹配。

原文地址:https://www.cnblogs.com/fifiyong/p/5944625.html