过滤器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 是从上到下顺序读取的。