为啥 FacesServlet 不能有 /*. 的 url 模式?

Posted

技术标签:

【中文标题】为啥 FacesServlet 不能有 /*. 的 url 模式?【英文标题】:Why FacesServlet cannot have a url-pattern of /*.?为什么 FacesServlet 不能有 /*. 的 url 模式? 【发布时间】:2013-02-19 01:32:30 【问题描述】:

这是我的 web.xml:

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet>
    <url-pattern>/*</url-pattern>
</servlet-mapping>

当我导航到:

http://localhost:8080/LearningRoot/index.xhtml

我可以很好地看到该页面,但是当我导航到:

http://localhost:8080/LearningRoot/

我得到错误:

发生错误:

FacesServlet 不能有 /* 的 url 模式。请定义不同的 url 模式。

但是为什么呢?

这是我的欢迎文件:

<welcome-file-list>
    <welcome-file>/index.xhtml</welcome-file>
</welcome-file-list>

【问题讨论】:

@KeremBaydoğan 你在真正的 Java Web 应用程序中尝试过吗? 不 :) 这只是一个猜测 :) 【参考方案1】:

因为这意味着 所有 遇到该上下文根将由 FacesServlet 处理,FacesServlet 已经知道它不可能满足的要求(这显然没有意义)。

要实现您想要的映射,请在 FaceServlet 上使用 .xhtml 映射

<servlet-mapping>
  <servlet-name>Faces Servlet</servlet-name>
  <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

【讨论】:

@KorayTugay / 将让它默认为每个标准 webapp 处理的 index 文件。 /* 是一个模棱两可的引用

以上是关于为啥 FacesServlet 不能有 /*. 的 url 模式?的主要内容,如果未能解决你的问题,请参考以下文章

FacesServlet.service() 方法在处理请求时消耗了太多时间(自费时间高)

无法在 Tomcat 7 中初始化 FacesServlet - ClassNotFoundException

java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet

javax/faces/webapp/FacesServlet

java.lang.ClassFormatError:类文件 javax/faces/webapp/FacesServlet 中非本机或抽象方法中的缺失代码属性

将基于 Maven 的 JSF 项目部署到 Tomcat 会导致 java.lang.ClassNotFoundException:javax.faces.webapp.FacesServlet [重