2012-10-16 34 views
1

我不知道java濾波器中doFilter()方法的生命週期。 我想知道如果我要在方法開始的請求中設置一個開始時間,是否有方法或地方在方法中設置一個停止時間,該方法可以讓我從請求開始時的總耗用時間到響應時間? 我見過一個帶有finally塊的doFilter()方法,我想知道在響應中設置停止時間是否合適?在java濾波器中計算響應時間

回答

3
import java.io.IOException; 
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.http.HttpServletRequest; 

public class ResponseTimerFilter implements Filter { 
    protected FilterConfig config; 

    public void init(FilterConfig config) throws ServletException { 
    this.config = config; 
    } 

    public void destroy() { 
    } 

    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) 
     throws ServletException, IOException { 
    long startTime = System.currentTimeMillis(); 
    chain.doFilter(request, response); 
    long elapsed = System.currentTimeMillis() - startTime; 
    String name = "servlet"; 
    if (request instanceof HttpServletRequest) { 
     name = ((HttpServletRequest) request).getRequestURI(); 
    } 

    config.getServletContext().log(name + " took " + elapsed + " ms"); 
    } 
} 

web.xml 
<filter> 
    <filter-name>Timing Filter</filter-name> 
    <filter-class>com.omh.filters.ResponseTimerFilter</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>Timing Filter</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 
+0

請更新答案,並附上一些解釋它如何工作的說明,而不是盲目複製粘貼代碼。 – Saanch