Jsf java.lang.IllegalArgumentException:无效<;url模式>;过滤器映射中的[Faces Servlet]
我正在为我的应用程序中的entityManager构建一个控制过滤器,但出现以下错误:Jsf java.lang.IllegalArgumentException:无效<;url模式>;过滤器映射中的[Faces Servlet],jsf,servlet-filters,Jsf,Servlet Filters,我正在为我的应用程序中的entityManager构建一个控制过滤器,但出现以下错误: Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> [Faces Servlet] in filter mapping at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3025)
Caused by: java.lang.IllegalArgumentException: Invalid <url-pattern> [Faces Servlet] in filter mapping
at org.apache.catalina.core.StandardContext.validateFilterMap(StandardContext.java:3025)
at org.apache.catalina.core.StandardContext.addFilterMap(StandardContext.java:2971)
at org.apache.catalina.startup.ContextConfig.configureContext(ContextConfig.java:1289)
at org.apache.catalina.startup.ContextConfig.webConfig(ContextConfig.java:1169)
at org.apache.catalina.startup.ContextConfig.configureStart(ContextConfig.java:775)
at org.apache.catalina.startup.ContextConfig.lifecycleEvent(ContextConfig.java:301)
at org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:123)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5051)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
... 27 more
我的在web.xml
中面向Servlet
:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
Facesservlet
javax.faces.webapp.FacesServlet
1.
Facesservlet
*.xhtml
您的错误在这里:
@WebFilter("Faces Servlet")
您将facesservlet
指定为注释的默认值(即未将其指定给任何特定属性名)。如果您在@WebFilter
中查找默认值的含义,则您将阅读以下内容:
值
筛选器应用到的URL模式
因此,注释的默认值被解释为URL模式。这完全解释了您遇到的异常:
Invalid <url-pattern> [Faces Servlet] in filter mapping
这应该可以解决例外情况
但是,这并不一定能解决“连接太多”的问题,因为此更改将使您的筛选器的行为与您将其配置为@WebFilter(“*.xhtml”)
时的行为完全相同。这是因为servlet名称“facesservlet”
根据web.xml
映射到。。。。是的,还有*.xhtml
。因此,净效应是没有任何区别
最可能的情况是,您实际上想跳过过滤器中的JSF资源(CSS/JS/image资产)。也就是说,它们也匹配*.xhtml
URL模式。你需要以不同的方式解决这个问题。只需让过滤器跳过以上下文路径加上ResourceHandler.RESOURCE\u标识符开始的URL即可。将此代码放在doFilter()
方法的开头
if (request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
chain.doFilter(request, response);
return;
}
@WebFilter(servletNames = { "Faces Servlet" })
if (request.getRequestURI().startsWith(request.getContextPath() + ResourceHandler.RESOURCE_IDENTIFIER)) {
chain.doFilter(request, response);
return;
}