这是Tomcat7中的错误。我将其报告为问题53354。
由于无法在中指定调用顺序
@WebFilter,因此用户被迫<filter-mapping>在web.xml中明确指定。可以与@WebFilter(filterName)Glassfish和JBoss AS
中的结合使用,如下所示:@WebFilter(filterName="filter1")public class Filter1 implements Filter {}@WebFilter(filterName="filter2")public class Filter2 implements Filter {}与
<filter-mapping> <filter-name>filter1</filter-name> <url-pattern>/url1/*</url-pattern></filter-mapping><filter-mapping> <filter-name>filter2</filter-name> <url-pattern>/url2/*</url-pattern></filter-mapping>然而,它在Tomcat的7.0.27失败,出现以下异常混乱(的
<url-pattern>是 被设定)Caused by: java.lang.IllegalArgumentException: Filter mapping mustspecify either a
or a
at
org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3009)
at
org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2968)
at
org.apache.catalina.deploy.WebXml.configureContext(WebXml.java:1207)
at
org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1294)
at
org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:855)
at
org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:345)
at
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
at
org.apache.catalina.util.Lifecyclebase.fireLifecycleEvent(Lifecyclebase.java:90)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5161)
at
org.apache.catalina.util.Lifecyclebase.start(Lifecyclebase.java:150)
… 7 more
同时,最好的选择是使用Glassfish或JBoss AS,或者
<filter>无论如何都要注册过滤器。



