在 servlet 过滤器中,如何确定哪个 servlet 与 URL 匹配?
Posted
技术标签:
【中文标题】在 servlet 过滤器中,如何确定哪个 servlet 与 URL 匹配?【英文标题】:How can you determine which servlet matches a URL when inside a servlet filter? 【发布时间】:2021-04-29 19:47:19 【问题描述】:我正在运行一个 Jetty Web 服务器,并且我有一个通用的 servlet 过滤器来处理异常。作为其中的一部分,我想记录有关哪些 servlet 导致异常的聚合指标。有没有办法找出 web.xml 中定义的 servlet 与当前请求的 servlet 路径匹配?
【问题讨论】:
异常应该就是这样,异常。您检查日志,查看堆栈跟踪以识别引发异常的 servlet,然后修复代码使其不再发生。您是否有很多例外情况想要构建关于它们的聚合指标?为什么?你想做什么? 【参考方案1】:我有一个通用的 servlet 过滤器来处理异常
我认为你的意思是你的过滤器直接扩展javax.servlet.GenericFilter
。
有没有办法找出 web.xml 中定义的哪些 servlet 与当前请求的 servlet 路径匹配?
在任何给定的 servlet 上下文中,映射到给定 servlet 路径的 servlet 不应超过一个,因此在任何给定情况下,您都在寻找一个 servlet,而不是多个。
据我所知或所知,GenericFilter
和通用的ServletRequest
s 和ServletResponse
s 不能提供访问您所需要的信息的好方法。但是,如果您将请求转换为 HttpServletRequest
,那么您可以获得它的 HttpServletMapping
(从 Servlet 4.0 / Java EE 8 开始)
,其中包含在 webapp 的部署描述符中声明的 servlet 名称以及其他信息。或者HttpServletRequest
也可以直接提供servlet路径。
但是,如果您正在考虑转换请求,那么您最好让您的过滤器扩展 javax.servlet.http.HttpFilter
,这将为您提供类型安全的访问。这本身就是GenericFilter
的子类,因此执行这样的重构可能并不难。
【讨论】:
以上是关于在 servlet 过滤器中,如何确定哪个 servlet 与 URL 匹配?的主要内容,如果未能解决你的问题,请参考以下文章
eclipse web项目的编码过滤器,统一设置成UTF-8