Filter 过滤器

过滤器,其实就是对客户端发出来的请求进行过滤。浏览器发出,然后服务器派Servlet处理。在中间就可以过滤,其实过滤器起到的是拦截的作用,也就是拦截器。

  • 作用

    1.对一些敏感词汇进行过滤
    2.统一设置编码
    3.自动登录

如何使用Filter

1.定义一个类,实现Filter接口

public class FilterDemo implements Filter {
    public void destroy() {
    
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("来到过滤器");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {
    
    }
}

2.注册过滤器

在web.xml里面注册,注册的方式与Servlet差不多


  FilterDemo
    FilterDemo



    FilterDemo
    /*

Filter的生命周期

  • 创建

在服务器启动的时候创建

  • 销毁

服务器停止的时候销毁

Filter的执行顺序

1.客户端发出请求,先经过过滤器,如果过滤器通过,才会到Servlet。

2.如果有多个过滤器,那么将会按照注册的映射顺序(Filter-mapping 的顺序)进行依次拦截,只要有一个过滤器未通过,那么后面的过滤器,以及访问的Servlet都不会收到请求

3.需要执行chain.doFilter()方法,才算成功通过

public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("来到过滤器");
        chain.doFilter(ServletRequest, ServletResponse);//标志成功通过这个过滤器,放行,让请求到达下一个目标
    }

细节:

1.Filter接口的 init方法的参数 FilterConfig,可以用于获取Filter在注册的名字,以及初始化参数。这里的功能与ServletConfig是一样的。

2.如果想要放行,让请求到达下一个目标,需要使用参数chain,操作foFiler方法

chain.doFilter(ServletRequest, ServletResponse);//通过这个过滤器,放行,让请求到达下一个目标

3.< url-pattern>/*< /url-pattern>,表明Filter所要过滤的指定对象,类型,或者目录,其写法格式与servlet一样,( * 号是通配符)

1.全路径匹配,以 / 开始(以对象过滤)(精确匹配)
	
	/loginServlet

2.以目录匹配,以 / 开始,以 * 结束(以目录过滤)

	/demo01/*

3.以后缀名匹配,以 * 开始,以后缀名结束(以类型过滤)

	*.jsp , *.html , *.do

4.针对 dispatcher 设置

	REQUEST:只要是请求过来,都拦截(默认为REQUEST)
	FORWARD:只要是转发,都拦截
	ERROR:页面出错发生跳转时,拦截
	INCLUDE:包含页面的时候就拦截

PS:

可以书写多个 url-pattern 或者 dispatcher 标签,以组合过滤不同的类型


    FilterDemo
    /*
    /*.html
    /ServletDemo
    FORWARD
    ERROR

你可能感兴趣的:(Java)