dispatcher的意义:可以通过配置该属性的值,控制那些类型的请求会经过过滤器
Dispatcher属性的值:
REQUEST(默认值)、FORWARD、INCLUDE、ERROR、ASYNC
配置方式:使用注解@WebFilter的属性:dispatcherTypes,其值是一个数组,元素类型是DispatcherType枚举类型
使用web.xml中filter标签的子标签
可以为该属性同时配置多个值。
@WebFilter(urlPatterns = "*", dispatcherTypes = { DispatcherType.REQUEST,
DispatcherType.ASYNC })
测试代码:
servlet
package com.ls.javaees1;
import java.io.IOException;
import javax.servlet.AsyncContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns="/test1",asyncSupported=true)
public class Servlet1 extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//request.getRequestDispatcher("index.jsp").forward(request, response);
//request.getRequestDispatcher("index.jsp").include(request, response);
final AsyncContext context=request.startAsync();
context.start(new Runnable() {
@Override
public void run() {
context.dispatch("/index.jsp");
}
});
}
}
Filter
package com.ls.javaees1;
import java.io.IOException;
import javax.servlet.DispatcherType;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
@WebFilter(urlPatterns = "*", dispatcherTypes = { DispatcherType.REQUEST,
DispatcherType.ASYNC })
public class Filter1 implements Filter {
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain chain) throws IOException, ServletException {
System.out.println("filter1");
chain.doFilter(arg0, arg1);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}