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的主要内容,如果未能解决你的问题,请参考以下文章