1.过滤器的生命周期
import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;
public class HelloFilter1 implements Filter {
// 定义当前过滤器的属性
private String requestEncode;
/*
* 当服务器启动的时候被执行,说明过滤器的实例是在服务器启动时被创建的
* */
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器1被创建。。。");
}
/*
* filterChain过滤器的链
* 过滤器的执行方法
* */
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
// 业务逻辑
System.out.println("过滤器1开始。。。");
// 让过滤器往下走,放行,如果后面还有过滤器,那么就执行下一个过滤器,如果是最后一个过滤器,就去执行Controller
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("过滤器1结束。。。");
}
/*
* 当服务器关闭时当前方法被调用,销毁过滤器实例
* */
@Override
public void destroy() {
System.out.println("过滤器1被销毁。。。");
}
}
2.Filter处理字符编码
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>HelloFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
</filter>
3.FilterConfig
通过filterConfig来获取初始化的值
范例:
@Override
public void init(FilterConfig filterConfig) throws ServletException {
System.out.println("过滤器被创建。。。");
// 根据参数名来获得初始化参数
String encode = filterConfig.getInitParameter("encode");
// 给当前过滤器赋值
this.requestEncode = encode;
// 获得所有参数的名字
Enumeration<String> names = filterConfig.getInitParameterNames();
while (names.hasMoreElements()) {
String paramName = names.nextElement();
// 根据参数名来获得初始化参数
String paramValue = filterConfig.getInitParameter(paramName);
System.out.println(paramName +":"+paramValue);
}
}
<!--初始化的值写在init...-->
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
4.FilterChain(过滤器链)
1.创建两个Filter
2.配置文件
<!--
多个过滤器的执行顺序,是根据web.xml配置顺序决定,谁在前先执行谁
-->
<!--过滤器的配置(映射)-->
<filter>
<filter-name>helloFilter</filter-name>
<filter-class>HelloFilter</filter-class>
<init-param>
<param-name>encode</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>param1</param-name>
<param-value>value1</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>helloFilter</filter-name>
<!-- 拦截的范围
1.完整路径匹配 以/开头 例如 /aaa /aaa/bbb
2.目录匹配 以/开头 例如 /aaa/* /*
3.扩展名匹配 不能以/开头 例如*.do *.action ....
-->
<!-- <url-pattern>/*</url-pattern>-->
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>filter1</filter-name>
<filter-class>HelloFilter1</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>