Filter即为过滤器,能实现整体或局部过滤的功能,入门开发例子如下
新建class类 FilterDemo1,并实现javax.servlet.Filter
package cn.itcast.web.filter;
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 FilterDemo1 implements Filter {//实现javax.servlet.Filter
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter");
//放行
chain.doFilter(request, response);
}
public void destroy() {
}
}
配置web.xml文件(Filter配置在servlet之前)
<filter>
<filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
<filter-name>FilterDemo1</filter-name>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern><!--过滤根目录下所有文件
--></filter-mapping>
如果有多个Filter,形成Filter链的话,执行顺序是按照web.xml中配置的顺序,从上到下执行的,并且,执行过程中,先执行每个chain.doFilter(request,,response),然后倒着执行chain后面的内容,Demo如下
FilterDemo1
package cn.itcast.web.filter;
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 FilterDemo1 implements Filter {//实现javax.servlet.Filter
public void init(FilterConfig filterConfig) throws ServletException {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("doFilter 1");
//放行
chain.doFilter(request, response);
System.out.println("do after 1");
}
public void destroy() {
}
}
FilterDemo2
package cn.itcast.web.filter;
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 FilterDemo2 implements Filter {
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
System.out.println("Filter 2");
chain.doFilter(request, response);
System.out.println("do after 2");
}
public void init(FilterConfig filterConfig) throws ServletException {
}
}
web.xml配置文件如下
<filter>
<filter-class>cn.itcast.web.filter.FilterDemo1</filter-class>
<filter-name>FilterDemo1</filter-name>
</filter>
<filter-mapping>
<filter-name>FilterDemo1</filter-name>
<url-pattern>/*</url-pattern><!--过滤根目录下所有文件
--></filter-mapping>
<filter>
<filter-class>cn.itcast.web.filter.FilterDemo2</filter-class>
<filter-name>FilterDemo2</filter-name>
</filter>
<filter-mapping>
<filter-name>FilterDemo2</filter-name>
<url-pattern>/*</url-pattern><!--过滤根目录下所有文件
--></filter-mapping>
则执行的结果如下所示:
doFilter 1
Filter 2
do after 2
do after 1