Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)

时间:2022-07-25
本文章向大家介绍Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序),主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

Java Filter过滤器+Listen监听器

啥是过滤器

顾名思义即过滤掉一些东西,比如我们经历的高考中考都是过滤器,他过滤掉一些在学习这一方面不是很好的人,而那些成绩好的人则升入高中,大学。

但是java中的过滤器与生活中的过滤器的作用是相差无几的,即按照制定的一些规则来控制一些对象

Filer的作用:

过滤器是出于客户端与服务器端之间的一道过滤网,在访问资源之前,通过一系列的过滤器对请求 进行修改,判断等。把不符合规则的请求在中途拦截或修改,拦截或修改响应

如何创建使用一个Filter

1.定义一个类实现接口Filter(java.servlet)

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

public class Filter1 implements javax.servlet.Filter{

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }
}

Filer的生命周期:

1.init:在服务器启动后,会创建Filter对象,然后调用init方法,只执行一次用于加载资源 2.doFilter:每一次请求被拦截都会执行 3.destory:在服务器关闭后,Filter对象会被销毁,如何服务器对象正常关闭,destory方法会被执行一次 用于释放资源

2.复写方法 3.设置拦截路径 设置拦截路径有两种方法,一种是注解配置,一种是设置web.xml

注解配置

即加上一个@WebFilter("")

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
@WebFilter("/*")
public class Filter1 implements javax.servlet.Filter{
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    }
    @Override
    public void destroy() {
    }
}

web.XML配置:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <filter>
        <filter-name>demo1</filter-name>
        <filter-class>Filter1</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
        //设置拦截路径
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

拦截路径配置的讲解 1.具体的资源路径:/index.jsp 只有在访问index.jsp这个资源的时候过滤器才会被执行 2.拦截目录:/user/* 访问/user下的所有资源的时候过滤器才会被执行 3.后缀名拦截:.jsp 访问后缀名为jsp的资源的时候,过滤器才会被执行 4.拦截所有资源:/ 访问所有资源,都会被拦截

拦截方式的配置注解配置:

  • 设置dispatcherTypes属性 1. REQUEST:默认值。浏览器直接请求资源 2. FORWARD:转发访问资源 3. INCLUDE:包含访问资源 4. ERROR:错误跳转资源 5. ASYNC:异步访问资源 web.xml配置 * 设置标签即可

过滤器的执行流程:

1.执行过滤器 2.执行放行后的资源 3.执行过滤器放行器代码下边的代码

过滤器链(配置多个过滤器)

执行顺序 如果有两个过滤器:过滤器1和过滤器2 1. 过滤器1 2. 过滤器2 3. 资源执行 4. 过滤器2 5. 过滤器1

看图按照从左到右的顺序来看就好理解了

那么有了多个过滤器之后又是怎么来判断那个过滤器先哪个过滤器后的呢? 是随机判断的?

当然不是啦

过滤器先后执行顺序的判断方法

1. 注解配置: 按照类名的字符串比较规则比较,值小的先执行

  • 如: AFilter 和 BFilter,AFilter就先执行了。 2. web.xml配置: 谁定义在上边,谁先执行