大数据必学Java基础(一百零八):过滤器的生命周期
2023-06-13 09:15:58 时间
过滤器的生命周期
同servlet对象一样,Filter对象的创建也是交给web服务器完成的,在web服务器创建和使用及最后销毁filter时,会调用filter对应的方法。
一、构造方法
实例化一个Filter对象的方法。
二、初始化方法
public void init(FilterConfig filterConfig);
和我们编写的Servlet程序一样,Filter的创建和销毁由WEB服务器负责。 web 应用程序启动时,web 服务器将创建Filter 的实例对象,并调用其init方法,读取web.xml配置,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作(filter对象只会创建一次,init方法也只会执行一次)。开发人员通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。
三、拦截请求方法
public void doFilter
这个方法完成实际的过滤操作,当客户请求访问与过滤器关联的URL的时候,Servlet过滤器将先执行doFilter方法。FilterChain参数用于访问后续过滤器。
四、销毁方法
public void destroy();
Filter对象创建后会驻留在内存,当web应用移除或服务器停止时才销毁。在Web容器卸载Filter对象之前被调用。该方法在Filter的生命周期中仅执行一次。在这个方法中,可以释放过滤器使用的资源。
五、总体过程
- WEB 容器启动时,会对Filter进行构造并初始化 一次
- 每次请求目标资源时,都会执行doFilter的方法
- WEB容器关闭是,会销毁Filter对象
六、实例代码
package com.lanson.filter;
import javax.servlet.*;
import java.io.IOException;
/**
* @Author: Lansonli
* @Description: MircoMessage:Mark_7001
*/
public class MyFilter implements Filter {
public MyFilter(){
System.out.println("MyFilter constructor invoked");
}
// 初始化方法
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("MyFilter init invoked");
}
// 作出过滤的方法
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("Filter doFilter 对请求作出过滤");
// 通过一行代码 放行请求
// 放行请求,交给过滤器链继续进行过滤 最后到达资源
filterChain.doFilter(servletRequest, servletResponse);
System.out.println("Filter doFilter 对响应作出过滤");
servletResponse.getWriter().print("filter 追加一些数据");
}
// 销毁方法
@Override
public void destroy() {
System.out.println("MyFilter destory invoked");
}
}
相关文章
- 大数据必学Java基础(四十七):异常的讲解
- 大数据必学Java基础(四十九):Math类和Random类的讲解
- 学 Java,要会哪些技能?
- java常量有哪些_Java中的常量有哪些?
- MySQL字段类型如何转为java_Java JDBC中,MySQL字段类型到JAVA类型的转换
- java 基础语法
- 大数据必学Java基础(六十三):COW并发容器讲解
- RabbitMQ基础介绍与在java中使用-入门「建议收藏」
- Java基础学习(2)
- 大数据必学Java基础(九十一):JDBC概述
- 大数据必学Java基础(一百零三): log4j日志框架
- 大数据必学Java基础(一百一十三):监听器概念引入
- 大数据必学Java基础(一百一十五):Session域监听器
- java语言基础详解编程语言
- Java 连接 Redis:实现数据快速传输(java连redis)
- Java与Oracle的连接方式(java连oracle)
- Java使用Oracle实现优雅数据查询(java.oracle)