在servlet中filter,filterChain.doFilter(request,response);應將請求傳遞給下一個鏈中。 但考慮以下兩個代碼:
代碼1:Servlet過濾器模糊不清?
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秒後發送。 爲什麼這種過濾器中的歧義?
您可以通過顯式關閉與響應關聯的輸出流(或寫入器)來釋放客戶端,但我不相信這是有保證的。 – 2012-08-17 18:43:33