在 servlet 过滤器中, filterChain.doFilter(request, response); 应该将请求传递给链中的下一个。但请考虑以下两个代码:
代码 1:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
filterChain.doFilter(request, response);
try
{
Thread.sleep(20000);
}
catch(Exception e)
{
}
}
代码 2:
public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) throws IOException, ServletException
{
try
{
Thread.sleep(20000);
}
catch(Exception e)
{
}
filterChain.doFilter(request, response);
}
两个过滤器的执行方式相同。即在服务请求之前两者都需要 20 秒。
但实际上应该发生的是Code1
应该立即发球并且Code2
应该在 20 秒后发球。为什么过滤器中有这种歧义?