前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java Filter过滤器(拦截路径的配置+拦截方式的配置+生命周期+多个过滤器的先后执行顺序)

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

作者头像
一只胡说八道的猴子
发布2020-09-27 10:24:51
3.9K0
发布2020-09-27 10:24:51
举报
文章被收录于专栏:Java系列学习与数据结构算法

Java Filter过滤器+Listen监听器

啥是过滤器

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

在这里插入图片描述
在这里插入图片描述

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

Filer的作用:

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

在这里插入图片描述
在这里插入图片描述

如何创建使用一个Filter

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

代码语言:javascript
复制
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("")

代码语言:javascript
复制
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配置:

代码语言:javascript
复制
<?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配置: 谁定义在上边,谁先执行
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-08-08 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java Filter过滤器+Listen监听器
  • 啥是过滤器
  • Filer的作用:
  • 如何创建使用一个Filter
  • Filer的生命周期:
  • 过滤器的执行流程:
  • 过滤器链(配置多个过滤器)
  • 过滤器先后执行顺序的判断方法
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档