当web服务器启动的时候会,Tomcat会开始帮我们创建filter对象,然后就Filter对象的方法Init()进行初始化,当客户端向服务器发出请求的时候,会调用doFilter方法对请求和响应进行过滤,只要在这个会话内,多个请求会多次调用doFilter方法,当web服务器关闭的时候,就会调用destory方法让这个Filter对象销毁。其中构建只构建一次,初始化一次,但doFilter方法调用多次,销毁方法也只调用一次,因为在接口Filter中Init方法和destory方法都是default,所以在实现这个接口的时候可以不实现这两个方法,也可以实现Init()的初始化参数filterConfig, 我们就用web.xml的形式来配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_6_0.xsd"
version="6.0">
<filter>
<filter-name>loggingFilter2</filter-name>
<filter-class>com.atguigu.filter.Logging2Filter</filter-class>
<init-param>
<param-name>username</param-name> // 初始化参数的key
<param-value>123456</param-value> // 初始化参数的value
</init-param>
</filter>
<filter-mapping>
<filter-name>loggingFilter2</filter-name>
<servlet-name>servletA</servlet-name>
</filter-mapping>
</web-app>
获得FilterConfig参数
package com.atguigu.filter;
import jakarta.servlet.*;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.ObjectInputFilter;
import java.text.SimpleDateFormat;
import java.util.Date;
public class Logging2Filter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 此处省略
}
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println(filterConfig.getInitParameter("username"));
}
}
启动Tomcat,看服务器日志中 的内容