【问题标题】:calculating response time in java filter在java过滤器中计算响应时间
【发布时间】:2012-10-06 22:14:41
【问题描述】:

我不知道 java 过滤器中 doFilter() 方法的生命周期。 我想知道我是否要在方法开始时在请求中设置开始时间,有没有办法或地方在方法中设置停止时间,这会给我从请求开始到的总经过时间给出答复的时间? 我已经看到了一个带有 finally 块的 doFilter() 方法,我想知道在响应中设置停止时间是否合适?

【问题讨论】:

    标签: response servlet-filters


    【解决方案1】:
    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>
    

    【讨论】:

    • 请用一些解释它如何工作的陈述来更新答案,而不是盲目地复制粘贴代码。
    猜你喜欢
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-16
    相关资源
    最近更新 更多