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差不多

<filter>
  <filter-name>FilterDemo</filter-name>
    <filter-class>FilterDemo</filter-class>
</filter>

<filter-mapping>
    <filter-name>FilterDemo</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
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 标签,以组合过滤不同的类型

<filter-mapping>
    <filter-name>FilterDemo</filter-name>
    <url-pattern>/*</url-pattern>
    <url-pattern>/*.html</url-pattern>
    <url-pattern>/ServletDemo</url-pattern>
    <dispatcher>FORWARD</dispatcher>
    <dispatcher>ERROR</dispatcher>
</filter-mapping>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值