过滤器二:过滤器生命周期;过滤器特性;

目录

一:过滤器生命周期:

二:过滤器特性:


一:过滤器生命周期:

沿用上篇博客的MyFirstFilter这个过滤器类:为了便于观察,init()方法和destroy()方法中添加了打印语句;

package com.imooc.filter;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class MyFristFilter implements Filter{

	@Override
	public void destroy() {
		// 在实际项目中,销毁的目的是对执行init()方法时加载的资源;或者在doFilter()方法中产生的新的资源进
		// 行释放,保证过滤器被销毁了之后,系统中不会有任何的残留;
		System.out.println("destroy()方法执行了,过滤器已被销毁!");
	}

	/**
	 * doFilter方法三个参数:ServletRequest:请求对象;ServletResponse:响应对象;FilterChain:过滤链对象
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		System.out.println("过滤器已执行");
		chain.doFilter(request, response);  // 将请求与响应对象随着过滤链依次向后传递,如果不写这句话,请求是无法向后被正常地传递的;
		
	}

	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// 比如加载指定的参数,从其他的文件或数据库中提取所需要的数据,这些都是init()初始化方法需要做的事情;
		System.out.println("init()方法执行了,过滤器初始化成功!");
		
	}

}

启动web应用程序:执行init()方法

发现,web应用启动的时候,过滤器对象会被Tomcat自动创建,然后init()方法会被自动地执行;

但是,init()方法执行完后,并不会立即去执行doFilter()方法,因为doFilter()方法执行的时机是在每一个请求过来之后,被过滤器中的doFilter()方法拦截处理后才会执行doFilter()方法;

访问Servlet,发起请求:执行doFilter()方法

关闭或重启web应用,执行destroy()方法,销毁过滤器:


二:过滤器特性:

猜你喜欢

转载自blog.csdn.net/csucsgoat/article/details/114260406