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
}
}