一,Filter简介
Filter也称之为过滤器,Filter是对客户端访问资源的过滤,符合条件放行,不符合条件不放行,并且可以对目标资源访问前后进行逻辑处理。
二,Filter开发步骤
1)编写一个过滤器的类实现Filter接口
2)实现接口中尚未实现的方法(着重实现doFilter方法)
3)在web.xml中进行配置(主要是配置要对哪些资源进行过滤)
例如:
FilterDemo.java
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 FilterDemo implements Filter{ @Override public void destroy() { System.out.println("----过滤器销毁----"); } @Override public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2) throws IOException, ServletException { System.out.println("----过滤器处理----"); //放行 arg2.doFilter(arg0, arg1); } @Override public void init(FilterConfig arg0) throws ServletException { System.out.println("----过滤器初始化----"); } }
Web.xml
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Filter</display-name> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> <!--配置过滤器 --> <filter> <filter-name>FilterDemo</filter-name> <filter-class>com.zender.FilterDemo</filter-class> </filter> <!--映射过滤器 --> <filter-mapping> <filter-name>FilterDemo</filter-name> <!--“/*”表示拦截所有的请求 --> <url-pattern>/*</url-pattern> </filter-mapping> <dispatcher>REQUEST</dispatcher> </web-app
三,Filter的生命周期
Filter的创建和销毁由WEB服务器负责。 web应用程序启动时,web服务器将创建Filter 的实例对象,并调用其init方法,完成对象的初始化功能,从而为后续的用户请求作好拦截的准备工作,filter对象只会创建一次,init方法也只会执行一次。通过init方法的参数,可获得代表当前filter配置信息的FilterConfig对象。web服务器调用destroy方法销毁Filter。destroy方法在Filter的生命周期中仅执行一次。
web服务器启动时:
访问时:
web服务器关闭时:
Filter接口有三个方法,并且这个三个都是与Filter的生命相关的方法:
init(Filter config) |
代表filter对象初始化方法 filter对象创建时执行。 参数: config代表该Filter对象的配置信息的对象,内部封装是该filter的配置信息。 |
doFilter(ServletRequest request, ServletResponse response,FilterChain chain) |
代表filter执行过滤的核心方法,如果某资源在已经被配置到这个filter进行过滤的话,那么每次访问这个资源都会执行doFilter方法。 参数: ServletRequest/ServletResponse: 每次在执行doFilter方法时web容器负责创建一个request和一个response对象作为doFilter的参数传递进来。该request个该response就是在访问目标资源的service方法时的request和response。 FilterChain: 过滤器链对象,通过该对象的doFilter方法可以放行该请求。 |
destory() |
代表是filter销毁方法 当filter对象销毁时执行该方法。 |