首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java Web Filter 統計 Servlet 執行時間並在頁面顯示

     編輯:程式設計綜合問答

Filter 實現

public class TimerFilter implements Filter {
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
            throws IOException, ServletException {
        long start = System.currentTimeMillis();
        chain.doFilter(req, resp); // 執行後續 Filter 與 Servlet
        long elapsed = System.currentTimeMillis() - start;

        String uri = ((HttpServletRequest) req).getRequestURI();
        // 方式一:寫入 ServletContext 日誌(控制台/文件)
        getServletContext().log(uri + " 執行耗時: " + elapsed + "ms");

        // 方式二:放入請求屬性,JSP/頁面讀取顯示
        req.setAttribute("execTime", elapsed);
    }
}

頁面顯示方案

方案 A:JSP 直接讀取

<%-- 頁面底部 --%>
<div class="debug-info">
    頁面執行耗時: ${requestScope.execTime} 毫秒
</div>

方案 B:響應包裝器注入 HTML

自定義 HttpServletResponseWrapper,在 getWriter() 返回的 PrintWriter 中攔截 close(),將耗時信息追加到 </body> 前。

配置 web.xml

<filter>
    <filter-name>TimerFilter</filter-name>
    <filter-class>com.example.TimerFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>TimerFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

關鍵點

  • Filter 執行時間 = chain.doFilter() 前後時間差,包含 Servlet 與視圖渲染。
  • 若需精確到 Servlet 內部,可在 Controller 基類中記錄。
  • 生產環境建議異步寫入日誌系統(如 Logstash、ELK),避免阻塞響應。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved