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配置

    谁定义在上边,谁先执行

以上就是Filter的一些基础知识,写作不易,请各位老铁点个赞支持一下,觉得有帮助的也可以收藏呀,我会经常更新文章,也可以关注我呀

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

  1. Servlet访问路径的两种方式、Servlet生命周期特点、计算服务启动后的访问次数、Get请求、Post请求

    Servlet访问路径的两种方式: 1:注解 即在Servlet里写一个@WebServlet @WebServlet("/myServlet") 2:配置web.xml < ...

  2. 使用外部属性文件配置Bean以及Bean的生命周期方法

    1.使用外部属性文件配置Bean 在配置文件里配置 Bean 时, 有时需要在 Bean 的配置里混入系统部署的细节信息(例如: 文件路径, 数据源配置信息等). 而这些部署细节实际上需要和 Bean ...

  3. 「小程序JAVA实战」 小程序默认加载的页面和生命周期(八)

    转自:https://idig8.com/2018/08/09/xiaochengxu-chuji-08/ 小程序如何加载的呢?生命周期!源码:https://github.com/limingios ...

  4. 【Java编码准则】の #01限制内存中敏感数据的生命周期

    当竞争对手的应用程序与我们的应用程序执行在同一个系统上时,我们的应用程序在内存中的敏感数据是非常easy被竞争对手获取的.假设我们的应用程序符合以下几种情况之中的一个,那么竞争对手能够获取到我们应用的 ...

  5. Java读取resource文件/路径的几种方式

    方式一: String fileName = this.getClass().getClassLoader().getResource("文件名").getPath();//获取文 ...

  6. java中获取文件路径的几种方式

    http://xyzroundo.iteye.com/blog/1116159关于绝对路径和相对路径: 绝对路径就是你的主页上的文件或目录在硬盘上真正的路径,(URL和物理路径)例如:C:xyz es ...

  7. Java框架spring 学习笔记(三):Bean 的生命周期

    当一个 bean 被实例化时,它可能需要执行一些初始化使它转换成可用状态.当bean不再需要,并且从容器中移除时,需要做一些清除工作.为了定义安装和拆卸一个 bean,我们只要声明init-metho ...

  8. Android配置横屏资源与Activity生命周期

    屏幕旋转会改变设备配置(device configguration).设备设置的特征有:屏幕方向.屏幕像素密度.屏幕尺寸.键盘类型.底座模式以及语言等.    当屏幕发现旋转时(设备配置更改),And ...

  9. java线程基础巩固---Thread中断Interrupt方法学习&采用优雅的方式结束线程生命周期

    Interrupt学习: 在jdk中关于interrupt相关方法有三个,如下: 关于上面的疑问会在稍后进行阐述滴,下面看代码: 编译运行: 应该说是t线程为啥在被打断之后没有退出,还是在运行状态,这 ...

随机推荐

  1. 《利用Python进行数据分析》自学知识图谱-导航

    项目简介 Project Brief <利用Python进行数据分析-第二版>自学过程中整理的知识图谱. Python for Data Analysis: Data Wrangling ...

  2. TX 1核4G2M云服务器,376/2年,可免费续1年

    腾讯云个人开发者活动 https://cloud.tencent.com/act/developer

  3. 安装调试mosquitto日志

    1.下载mosquitto安装包https://mosquitto.org/download/2.安装其他依赖包 yum install gcc gcc-c++ libstdc++-devel yum ...

  4. Redis之对象

    1.对象的类型与编码 Redis使用对象来表示数据库中的键和值,每次我们在Redis的数据库中新创建一个键值对,我们至少会创建两个对象,一个键对象,另一个值对象. 每个对象都由一个redisObjec ...

  5. OpenXml demo

    class OpenXmlDemo { /* * excel 对象结构 * SpreadsheetDocument * >WorkbookPart * >WorksheetPart * & ...

  6. [jvm] -- 监控和调优常用命令工具篇

    jps:java版本的ps,查看进程的信息 jps -l 输出jar包路径,类全名 jps -m 输出main参数 jps -v 输出JVM参数 jinfo:是用来查看JVM参数和动态修改部分JVM参 ...

  7. 学Python入门应该先学什么?看完本文你就知道了

    学Python应先从Python开发基础部分入手:1.如学习Python语言介绍2.环境安装3.Python基本语法4.基本数据类型5.二进制运算6.来流程控制.7.字符编码.文件处理8.数据类型9. ...

  8. 21天学通C++(C++程序的组成部分)

    C++程序被组织成类,而类由成员函数和成员变量组成. 本章学习: 1)C++程序的组成部分. 2)各部分如何协同工作. 3)函数及其用途. 4)基本输入输出操作. C++程序划分为两个部分,以#大头的 ...

  9. stringsream用法

    stringstream: 头文件: #include <sstream> 简单整理一下这玩意的作用,主要有三个吧. 类型转化 字符串拼接 字符串整合(这一个用处特别大!!!!!!!) 先 ...

  10. int转换sys,argv参数问题