JavaWeb——Filter生命周期

Filter(过滤器)生命周期各方法执行顺序

  1. 服务器启动,首先执行构造方法和init方法(这两个方法只执行一次)
  2. 当有匹配过滤条件的请求时执行doFilter方法(该方法可以执行多次)
  3. 服务器正常关闭的时候,或者该Filter类重新加载的时候会执行destroy方法(该方法只执行一次)

Filter生命周期各方法执行顺序原理图如下。
在这里插入图片描述

各方法执行顺序的代码验证

创建一个Filter类

public class TestFilter implements Filter {
   
	public TestFilter() {
   
		System.out.println("ConstructorMethod");
	}
	public void init(FilterConfig fConfig) throws ServletException {
   
		System.out.println("initMethod");
	}
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
   
		request.setCharacterEncoding("UTF-8");
		response.setCharacterEncoding("UTF-8");
		System.out.println("请求");
		chain.doFilter(request, response);
		System.out.println("响应");
	}
	
### Java Web 过滤器的生命周期 #### 初始化阶段 当Web应用程序启动时,Servlet容器会加载并实例化所有的`Filter`类。对于每个过滤器,容器都会调用一次`init(FilterConfig config)`方法来完成初始化工作[^1]。此过程类似于Servlet的初始化流程,在这里可以通过传入的`FilterConfig`参数获取到配置信息以及上下文环境。 #### 请求处理阶段 每当有客户端发起HTTP请求至服务器端某个受保护资源前,这些请求将会按照部署描述符中定义好的顺序依次通过一系列已注册过的过滤器链(`FilterChain`)。此时,每个过滤器都将有机会执行自己的业务逻辑——即实现`doFilter(ServletRequest request, ServletResponse response, FilterChain chain)`函数体内的代码片段[^3]。在这个过程中,开发人员可以根据实际需求决定是否继续传递给下一个过滤器或是直接终止整个请求响应周期。 #### 销毁阶段 一旦Web应用停止服务或者重新部署新版本程序包,则所有关联着当前应用实例的对象都需要被清理释放掉;这其中自然也包含了各个过滤器所占用的相关资源。为此,容器会在适当时候触发各过滤器内部声明的`destroy()`回调机制以便于开发者能够妥善地回收不再使用的外部连接、缓存数据等重要资产。 ```java public class ExampleFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // Initialization code here... } @Override public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { try { // Pre-processing logic before the target resource is accessed chain.doFilter(req, res); // Pass control to next element in filter chain or final destination // Post-processing logic after the target resource has been processed (if applicable) } catch (Exception e){ throw new ServletException(e.getMessage()); } } @Override public void destroy() { // Cleanup resources and finalize operations when this filter instance is about to be removed from service. } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值