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配置: 谁定义在上边,谁先执行
- Servlet第四篇【request对象常用方法、应用】
- Servlet第五篇【介绍会话技术、Cookie的API、详解、应用】
- Java类加载器(用户自定义类加载器实现)
- Servlet第六篇【Session介绍、API、生命周期、应用、与Cookie区别】
- 一个oracle蠕虫病毒 (r4笔记第60天)
- 提高效率,eclipse上你可能不知道的技巧
- AJAX入门这一篇就够了
- 014 Java的反射机制
- XML+JSON面试题都在这里
- 客户关系管理系统
- 016 Java中的动态代理
- JSON就是这么简单
- 017 Java中的静态代理、JDK动态代理、cglib动态代理
- 我的学习、归纳方法(以学习 Maven 为例)
- java教程
- Java快速入门
- Java 开发环境配置
- Java基本语法
- Java 对象和类
- Java 基本数据类型
- Java 变量类型
- Java 修饰符
- Java 运算符
- Java 循环结构
- Java 分支结构
- Java Number类
- Java Character类
- Java String类
- Java StringBuffer和StringBuilder类
- Java 数组
- Java 日期时间
- Java 正则表达式
- Java 方法
- Java 流(Stream)、文件(File)和IO
- Java 异常处理
- Java 继承
- Java 重写(Override)与重载(Overload)
- Java 多态
- Java 抽象类
- Java 封装
- Java 接口
- Java 包(package)
- Java 数据结构
- Java 集合框架
- Java 泛型
- Java 序列化
- Java 网络编程
- Java 发送邮件
- Java 多线程编程
- Java Applet基础
- Java 文档注释
- laravel 解决Eloquent ORM的save方法无法插入数据的问题
- laravel框架中控制器的创建和使用方法分析
- php 使用expat方式解析xml文件操作示例
- laravel利用中间件做防非法登录和权限控制示例
- laravel框架中表单请求类型和CSRF防护实例分析
- Yii框架getter与setter方法功能与用法分析
- laravel框架中视图的基本使用方法分析
- laravel5 Eloquent 实现事务方式
- Laravel 微信小程序后端搭建步骤详解
- Laravel使用swoole实现websocket主动消息推送的方法介绍
- Laravel框架Eloquent ORM删除数据操作示例
- PHP常用函数之base64图片上传功能详解
- laravel-admin 实现在指定的相册下添加照片
- Laravel框架Eloquent ORM修改数据操作示例
- PHP常用函数之格式化时间操作示例