Servlet 过滤器 - 识别被调用的 Servlet/JSP

Posted

技术标签:

【中文标题】Servlet 过滤器 - 识别被调用的 Servlet/JSP【英文标题】:Servlet Filters - Identifying the called Servlet/JSP 【发布时间】:2011-11-30 22:44:36 【问题描述】:

我正在编写一个测量 http 请求和响应时间的 Servlet 过滤器。

过滤器部署在 Apache Tomcat 7 Web 服务器上。

我想知道除了解析请求的 URI(例如,检查 .jsp 后缀)之外,是否有任何方法可以识别每个请求上调用了哪个 Servlet 或 JSP?

【问题讨论】:

【参考方案1】:

必须更改 servlet/JSP,以便它们设置特定的请求属性,然后您在 FilterChain#doFilter() 调用之后获得该属性。

我只能暗示HttpServletRequest#getServletPath() 可能是获取实际请求资源的更好方法。它以与上下文无关的方式执行此操作,因此您无需摆弄getRequestURI() 来修剪上下文路径。此外,如果有一个映射到的 servlet,例如 /foo/*,那么它只会返回 /foo 而不是 /foo/bar/baz。以防万一您有兴趣。

由于您使用的是 Tomcat,您可能会对它的内置 Access Log Valve 感兴趣,它为您提供了一种记录请求的方法,与众所周知的 Apache HTTPD(包括时间)几乎相同。当然,这只有在您对 Tomcat 实例具有完全的管理员控制权时才有意义。

【讨论】:

以上是关于Servlet 过滤器 - 识别被调用的 Servlet/JSP的主要内容,如果未能解决你的问题,请参考以下文章

servlet生命周期

servlet

Servlet 过滤器

Java中的各种生命周期

为啥实时 AppEngine 没有调用我的 servlet 过滤器?

Servlet组件之一——Filter过滤器