java.lang.IllegalArgumentException:过滤器映射指定了未知的过滤器名称 <filtername

Jen*_*ens 2 mapping servlets illegalargumentexception servlet-filters

我收到以下异常

Caused by: java.lang.IllegalArgumentException: Filter mapping specifies an unknown filter name MyFilter
    at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3174)
    at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:3139)
    at org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1343)
    at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1362)
    at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:889)
    at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:386)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:117)
    at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:90)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5472)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:147)
    ... 10 more
Run Code Online (Sandbox Code Playgroud)

该过滤器存在于 jar 文件中,该文件是交付的 war 的一部分。

@WebFilter(filterName="MyFilter",
        urlPatterns = {"/page/*"})
public class myFilter implements Filter {
Run Code Online (Sandbox Code Playgroud)

谁能告诉我我必须做什么才能找到过滤器?

它不是问题java.lang.IllegalArgumentException: The servlet named [X] and [Y] are都映射到 url-pattern [/url] 的重复,这是不允许的,因为它是一个非常不同的错误消息

Bal*_*usC 5

换句话说,@WebFilter不被识别。当的 元素metadata-complete="true"中有属性时,就会发生这种情况。它基本上意味着容器假设其本身的元数据是完整的,因此它不会扫描.<web-app>web.xmlweb.xml/WEB-INF/lib

您有多种选择。

  1. metadata-complete="false"
  2. 完全删除metadata-complete。默认值已经是false.
  3. 通过显式注册过滤器<filter>

另一个可能的原因是 Tomcat 中的一个错误,该错误已在 7.0.28 中修复。另请参阅此相关问题:Using Tomcat, @WebFilter does not work with <filter-mapping> inside web.xml