java中的过滤器Filter

1.Filter概述

1.1.基本概念

Filter也称为过滤器,可以拦截对资源的访问,在拦截后可以进行一些额外操作,或者控制是否放行

1.2.过滤器功能逻辑

 

(1)过滤器可以拦截对资源的访问

(2)一个过滤器可以拦截多个资源,一个资源也可以被多个过滤器拦截

(3)是否拦截是根据访问的URL地址来确定

(4)所谓的拦截其实就是拦截下来代表请求的request和代表响应的response

(5)拦截后可以控制是否放行,如果放行,也可以在放行前后做一些额外操作

这种多个过滤器拦截的模式称为责任链模式

2.开发步骤

(1)写一个类,实现Filter接口,在servlet中注意导入的包是javax.servlet

package cn.tedu.filter;

import javax.servlet.*;
import java.io.IOException;

/**
 * Filter示例一 ,导入的是javax.servlet的包
 * @author wyy
 * @date 2020/6/22 9:46
 */
public class MyFilter1 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("filter1被创建了");
    }

    /**
     *   过滤器的核心方法,当资源被拦截后会调用此方法
     * @param servletRequest 请求的参数
     * @param servletResponse 响应的参数
     * @param filterChain 提供了doFilter方法与重写的方法名相同,但不是
     *                    同一个,filterChain的doFilter方法用来放行资源,如果不调用此
     *                    方法。默认不放行
     * @throws IOException 异常
     * @throws ServletException 异常
     */
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("filter1开始执行");
        //放行,利用filterChain的doFilter方法放行
        filterChain.doFilter(servletRequest,servletResponse);
        System.out.println("filter1结束执行");
    }

    @Override
    public void destroy() {
        System.out.println("filter1被销毁了");
    }
}

(2)在web.xml中配置Filter

    <filter>
        <filter-name>MyFlter1</filter-name>
        <filter-class>cn.tedu.filter.MyFilter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFlter1</filter-name>
        <!--/*:表示拦截所有的资源-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.开发细节

Filter接口的doFilter方法:

是Filter的核心方法,当过滤器拦截到资源后,会执行此方法,因此需要在此方法中完成业务逻辑

doFilter方法的参数:

ServletRequest:代表请求的参数

ServletResponse:代表响应的参数

FilterChain:提供了一个doFilter方法用来放行资源,在放行时需要将request对象和response对象作为参数,如果不调用FilterChain的doFilter方法,默认不放行

4.生命周期

在web应用启动时,Filter对象随之创建,一旦创建,一直存活在服务器中,当拦截到资源后,会调用doFilter处理拦截的逻辑,并决定是否放行。当web应用销毁时,filter随之销毁

5.Filter执行顺序

若果配置多个filter,其执行顺序取决于web.xml中<filter-mapping>的配置顺序

如下:在web.xml中配置了MyFlter1和MyFlter2 ,因为MyFlter1<filter-mapping>的在MyFlter2前面,所以顺序执行,先执行的就是MyFlter1

    <!--MyFlter2-->
    <filter>
        <filter-name>MyFlter2</filter-name>
        <filter-class>cn.tedu.filter.MyFilter2</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MyFlter2</filter-name>
        <!--/*:表示拦截所有的资源-->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值