2011-10-04 74 views
3

我在寫一個Servlet過濾器來測量http請求和響應時間。Servlet過濾器 - 識別被調用的Servlet/JSP

該過濾器部署在Apache Tomcat 7 Web服務器上。

我想知道除了解析請求的URI(例如,檢查.jsp後綴)之外,是否有任何方法可以確定在每個請求上調用哪個Servlet或JSP?

回答

4

不是不改變servlets/JSPs,以便它們設置一個特定的請求屬性,然後你調用FilterChain#doFilter()

我只能給出提示HttpServletRequest#getServletPath()可能是一種更好的方式來獲得實際請求的資源。它以獨立於上下文的方式執行此操作,因此您無需撥弄getRequestURI()即可關閉上下文路徑。另外,如果有一個servlet映射到例如/foo/*,那麼這將只返回/foo而不是/foo/bar/baz。以防萬一你有興趣。

由於您使用的是Tomcat,因此您可能會對其內置的Access Log Valve感興趣,它爲您提供了一種記錄請求的方法,其方式與衆所周知的Apache HTTPD相同,包括次數。當然,如果您對Tomcat實例具有完全的管理控制權,這當然是唯一有意義的。