【问题标题】:How to know inside a filter whenever a request is a mapped servlet?每当请求是映射的 servlet 时,如何知道过滤器内部?
【发布时间】:2026-02-02 20:35:01
【问题描述】:

我想知道,在 Filter doFilter 方法中,每当请求针对我的 web.xml 中的映射 servlet 时。有什么办法吗?

提前致谢,

费尔南多

【问题讨论】:

  • 除非您检查容器的源代码(并且您的解决方案将是特定于容器的),否则您无法弄清楚。一种可能的解决方案是解析您的 web.xml 文件,并在每个请求中检查 URL 是否与其中的任何 URL 匹配。
  • 谢谢!有什么方法可以为映射的 servlet 配置过滤器,还是只为 url 模式配置过滤器?
  • 你必须按照@balusc 在他的回答中所说的那样做。

标签: java jakarta-ee servlets servlet-filters


【解决方案1】:

这是不可能的。更好地将过滤器直接映射到这些 servlet。这可以通过使用<servlet-name> 而不是<url-pattern> 来完成。它必须完全是在 <servlet> 条目中定义的 <servlet-name>。如果需要,可以指定多个。

<filter-mapping>
    <filter-name>myFilter</filter-name>
    <servlet-name>myOneServlet</servlet-name>
    <servlet-name>myOtherServlet</servlet-name>
    <servlet-name>myLastServlet</servlet-name>
</filter-mapping>

或者当您已经使用 Java EE 6 /Servlet 3.0 并因此可能在类上使用 @WebFilter

@WebFilter(servletNames={"myOneServlet", "myOtherServlet", "myLastServlet"})

【讨论】: