サーブレットのフィルターでは、filterChain.doFilter(request, response); リクエストをチェーン内の次のリクエストに渡す必要があります。ただし、次の 2 つのコードを検討してください。
コード 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 秒後にサービスを提供する必要があります。Filter のこのあいまいさはなぜですか?