一、 拦截路径配置:配置方式有如下几种
1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行.这里的目录不是我们创建工程所指的目录,而是我们设置的虚拟资源路径的目录,如下所示:
3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
二、 拦截方式配置:配置方式有如下两种:
* 注解配置:
* 设置dispatcherTypes属性,取值如下:
1. REQUEST:默认值。浏览器直接请求资源
@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.REQUEST)//浏览器直接请求index.jsp资源时会执行过滤
2. FORWARD:转发访问资源
@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.FORWARD)//在发生转发请求时,如果转发请求的资源时index.jsp则执行过滤
3. INCLUDE:包含访问资源
4. ERROR:错误跳转资源
5. ASYNC:异步访问资源
注意:上述的取值可以同时存在多个,比如:
@WebFilter(value = "/index.jsp",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})
* web.xml配置
* 设置
三、注意:
1、如果拦截路径配置为"/*",而拦截方式设置了REQUEST和FORWARD,在执行请求资源中如果存在转发,则过滤在第一次请求和转发时都会被执行。
四、部分代码展示
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@WebFilter(value="/index.jsp",dispatcherTypes = DispatcherType.REQUEST)//浏览器直接请求index.jsp资源时会执行过滤
//@WebFilter(value = "/index.jsp",dispatcherTypes = DispatcherType.FORWARD)//在发生转发请求时,如果转发请求的资源时index.jsp则执行过滤
@WebFilter(value = "/index.jsp",dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD})//直接请求和转发时都执行过滤
public class FilterDemo05 implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
System.out.println("FilterDemo05...");
chain.doFilter(req, resp);
}
public void destroy() {
}
}