JavaWeb---Filter

什么是Filter?

  • 1,JavaWeb三大组件之一
  • 2,是JavaEE的规范,也就是接口
  • 3,作用:拦截请求,过滤响应

使用步骤:

  • 1,编写一个类实现Filter接口
  • 2,实现过滤方法doFilter()
  • 3,到web.xml配置Filter的拦截路径
public class FilterDemo implements Filter {

    public void destroy() {
        System.out.println("Filter 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 {
        System.out.println("Filter init");

    }
}

web.xml:

	<!-- filter标签用于配置一个Filter过滤器-->
    <filter>
		<!-- 给Filter起一个别名-->
        <filter-name>FilterDemo</filter-name>
		<!-- 配置一个Filter的全类名-->
        <filter-class>com.FilterDemo</filter-class>

        <init-param>
            <param-name>name</param-name>
            <param-value>Tom</param-value>
        </init-param>
    </filter>
	<!-- filter-mapping配置filter拦截过滤器的拦截路径-->
    <filter-mapping>
		<!-- 表示当前的拦截路径给那个filter使用-->
        <filter-name>FilterDemo</filter-name>
		<!-- 配置拦截路径-->
		<!-- "/"表示地址为:http://ip:port/工程路径/  映射到web目录-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

生命周期:

  1. 构造器方法
  2. init初始化方法:在工程创建时调用
  3. doFilter过滤方法:每次拦截请求会调用
  4. destroy销毁:停止web工程时调用

FilterConfig类:过滤器的配置文件类

作用:获取Filter过滤器的配置信息

  • 获取Filter的名称 filter-name的内容
  • 获取在Filter中配置的init-param初始化参数
  • 获取ServletContext对象
public class FilterDemo implements Filter {

    public void destroy() {
        System.out.println("Filter 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 {
        System.out.println("Filter init");

        //1,获取Filter的名称 filter-name的
        System.out.println("filter-name的内容:"+config.getFilterName());
        //2,获取在Filter中配置的init-param初始化参数
        System.out.println("init-param初始化参数:"+config.getInitParameter("name"));
        //3,获取ServletContext对象
        System.out.println("获取ServletContext对象:"+config.getServletContext());
    }
}

FilterChain过滤器链

FilterChain就是多个过滤器如何一起工作

作用:

  • 1,执行下一个Filter过滤器(如果有Filter)
  • 2,执行目标资源(没有Filter)

执行流程:

  • 在多个Filter过滤器执行时,它们执行的优先顺序由他们在web.xml从上到下配置顺序决定

在这里插入图片描述

多个Filter过滤器执行时的特点:

  • 1,所有filter和目标资源默认都执行在同一个线程中
  • 2,多个filter共同执行时,他们使用同一个Request对象

Filter匹配方式

  • 1,精确匹配:
<url-pattern>/hello.html<url-pattern/>

http://ip:port/工程名/hello.html

  • 2,目录匹配:
<url-pattern>/*<url-pattern/>

http://ip:port/工程名/*

  • 3,后缀名匹配:
<url-pattern>*.html<url-pattern/>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值