【问题标题】:How can you determine which servlet matches a URL when inside a servlet filter?在 servlet 过滤器中,如何确定哪个 servlet 与 URL 匹配?
【发布时间】:2021-04-29 19:47:19
【问题描述】:

我正在运行一个 Jetty Web 服务器,并且我有一个通用的 servlet 过滤器来处理异常。作为其中的一部分,我想记录有关哪些 servlet 导致异常的聚合指标。有没有办法找出 web.xml 中定义的 servlet 与当前请求的 servlet 路径匹配?

【问题讨论】:

  • 异常应该就是这样,异常。您检查日志,查看堆栈跟踪以识别引发异常的 servlet,然后修复代码使其不再发生。您是否有很多例外情况想要构建关于它们的聚合指标?为什么?你想做什么?

标签: java servlets jetty servlet-filters


【解决方案1】:

我有一个通用的 servlet 过滤器来处理异常

我认为你的意思是你的过滤器直接扩展javax.servlet.GenericFilter

有没有办法找出 web.xml 中定义的哪些 servlet 与当前请求的 servlet 路径匹配?

在任何给定的 servlet 上下文中,映射到给定 servlet 路径的 servlet 不应超过一个,因此在任何给定情况下,您都在寻找一个 servlet,而不是多个。

据我所知或所知,GenericFilter 和通用的ServletRequests 和ServletResponses 不能提供访问您所需要的信息的好方法。但是,如果您将请求转换为 HttpServletRequest,那么您可以获得它的 HttpServletMapping(从 Servlet 4.0 / Java EE 8 开始) ,其中包含在 webapp 的部署描述符中声明的 servlet 名称以及其他信息。或者HttpServletRequest也可以直接提供servlet路径。

但是,如果您正在考虑转换请求,那么您最好让您的过滤器扩展 javax.servlet.http.HttpFilter,这将为您提供类型安全的访问。这本身就是GenericFilter 的子类,因此执行这样的重构可能并不难。

【讨论】:

    猜你喜欢
    • 2011-07-29
    • 2011-02-26
    • 2015-03-06
    • 2011-10-17
    • 2010-12-30
    • 2013-03-16
    • 2011-04-10
    • 2011-07-15
    相关资源
    最近更新 更多