我正在编写一个测量http请求和响应时间的Servlet过滤器。
过滤器部署在Apache Tomcat 7 Web服务器上。
我想知道除了解析请求的URI(例如,检查.jsp后缀)之外,是否有任何方法可以确定在每个请求上调用哪个Servlet或JSP?
答案 0 :(得分:4)
并非不更改servlet / JSP,以便他们设置一个特定的请求属性,然后在FilterChain#doFilter()
调用后获取该属性。
我只能提示HttpServletRequest#getServletPath()
可能是获取实际请求资源的更好方法。它以与上下文无关的方式执行此操作,因此您无需使用getRequestURI()
来修剪上下文路径。此外,如果有一个servlet映射到例如/foo/*
,那么这只会返回/foo
而不是/foo/bar/baz
。以防万一你感兴趣。
由于你正在使用Tomcat,你可能会对它的内置Access Log Valve感兴趣,它为你提供了一种方法来记录请求的次数与知名的Apache HTTPD相同,包括时间。如果您对Tomcat实例具有完全的管理控制权,那么这当然是唯一有用的。