Filter 笔记

定义

  过滤器可以拦截所有访问web资源的请求或响应操作。

  是执行过滤任务的Filter对象,这些任务是针对对某一资源(servlet 或静态内容)的请求或来自某一资源的响应执行的,抑或同时针对这两者执行。

创建步骤

  1. 创建一个类,实现Filter接口
  2. 重写接口中的 doFilter方法,过滤操作的实现
  3. 在web.xml文件中配置 
    注意:在Filter的doFilter方法内如果没有执行chain.doFilter(request,response)那么资源是不会被访问到的。执行了才放行请求

Filter生命周期

  和servlet类似: 实例化 --> 初始化 --> 服务 --> 销毁

  当服务器启动,会创建Filter对象,并调用init方法,只调用一次。注意:并不是请求时创建,与servlet的默认不同

  服务: 当访问资源时,路径与Filter的拦截路径匹配,会执行Filter中的doFilter方法,这个方法是真正拦截操作的方法.

  销毁: 当服务器关闭时,会调用Filter的destroy方法来进行销毁操作.

Filter拦截方式

servlet负责处理请求,filter负责拦截和放行请求。拦截方式四种:

  • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
  • FORWARD:转发访问执行过滤器。包括RequestDispatcher#forward()方法、< jsp:forward>标签都是转发访问;
  • INCLUDE:包含访问执行过滤器。包括RequestDispatcher#include()方法、< jsp:include>标签都是包含访问;
  • ERROR:当目标资源在web.xml中配置为< error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器

 

Filter实例:

  字符编码过滤utf-8

import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFilterConfig implements Filter {

    private FilterConfig filterConfig;

    @Override
    public void destroy() {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        //通过filterConfig来获取配置信息中的初始化参数
        String encoding = filterConfig.getInitParameter("encoding");
        request.setCharacterEncoding(encoding);
        chain.doFilter(request, response);//放行
        
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        this.filterConfig = filterConfig;
    }

}

web.xml配置

<filter>
      <filter-name>MyFilterConfig</filter-name>
      <filter-class>com.jxlg.filter.MyFilterConfig</filter-class>
      <init-param>
          <param-name>encoding</param-name>
          <param-value>UTF-8</param-value>
      </init-param>
  </filter>
  <filter-mapping>
      <filter-name>MyFilterConfig</filter-name>
      <url-pattern>/*</url-pattern>
  </filter-mapping>

 

posted @ 2019-07-14 19:56  scmath  阅读(168)  评论(0编辑  收藏  举报