过滤器Filter

功能

1、⽤来拦截传⼊的请求和传出的响应。

2、修改或以某种⽅式处理正在客户端和服务端之间交换的数据流。

与使⽤ Servlet 类似,Filter 是 Java WEB 提供的⼀个接⼝,开发者只需要⾃定义⼀个类并且实现该接⼝即可。

package com.southwind.filter;
import javax.servlet.*;
import java.io.IOException;
public class CharacterFilter implements Filter {
 @Override
 public void doFilter(ServletRequest servletRequest, ServletResponse
servletResponse, FilterChain filterChain) throws IOException, ServletException
{
 servletRequest.setCharacterEncoding("UTF-8");
 filterChain.doFilter(servletRequest,servletResponse);
 }
}

web.xml中配置Filter

<filter>
 <filter-name>charcater</filter-name>
 <filter-class>com.southwind.filter.CharacterFilter</filter-class>
</filter>
<filter-mapping>
 <filter-name>charcater</filter-name>
 <url-pattern>/login</url-pattern>
 <url-pattern>/test</url-pattern>
</filter-mapping>

注意:doFilter方法中处理完业务逻辑之后,必须添加

filterChain.doFilter(servletRequest, servletResponse);

否则请求/响应无法向后传递,一直停留在过滤器中。

Filter的声明周期

当 Tomcat 启动时,通过反射机制调⽤ Filter 的⽆参构造函数创建实例化对象,同时调⽤ init ⽅法实现 初始化,doFilter ⽅法调⽤多次,当 Tomcat 服务关闭的时候,调⽤ destory 来销毁 Filter 对象。

⽆参构造函数:只调⽤⼀次,当 Tomcat 启动时调⽤(Filter ⼀定要进⾏配置)

init ⽅法:只调⽤⼀次,当 Filter 的实例化对象创建完成之后调⽤

doFilter:调⽤多次,访问 Filter 的业务逻辑都写在 Filter 中

destory:只调⽤⼀次,Tomcat 关闭时调⽤。 同时配置多个 Filter,Filter 的调⽤顺序是由 web.xml 中的配置顺序来决定的,写在上⾯的配置先调用,因为 web.xml 是从上到下顺序读取的。

原文地址:https://www.cnblogs.com/Gazikel/p/14139372.html