3

我正在尝试在 glassfish 本地服务器上部署一个非常简单的和我的第一个 JSF 应用程序(遵循BalusC 的一个非常好的教程)。我完成了创建应用程序的所有步骤。当我尝试在 glassfish 服务器上部署应用程序时,它只是失败并显示以下异常消息:-

    cannot Deploy Playground
    Deployment Error for module: Playground: Exception while deploying the app : 
    java.lang.IllegalArgumentException: Invalid URL Pattern: [xhtml]

谁能解释错误在哪里,我该如何修改?

4

3 回答 3

4

这不是有效的 url 模式。您可以将映射安排为前缀映射或扩展映射(来自JSF 2.0 规范):

前缀映射:

<servlet-mapping>
  <servlet-name> faces-servlet-name </servlet-name>
  <url-pattern>/faces/*</url-pattern>
</servlet-mapping>

扩展映射:

<servlet-mapping>
  <servlet-name> faces-servlet-name </servlet-name>
  <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
于 2011-03-26T11:02:08.180 回答
4

<url-pattern>必须包含扩展匹配(以 a 开头*)或前缀匹配(以 开头/),而不仅仅是xhtml.

这是我的做法。

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
于 2011-03-26T11:05:30.577 回答
3

Servlet 映射的规则包含在Servlet 3.0 规范中:

映射规范

在 Web 应用程序部署描述符中,使用以下语法来定义映射:

  • 以字符开头/并以后缀结尾的字符串/* 用于路径映射。
  • 以前缀开头的字符串*.用作扩展映射。
  • 空字符串 ("") 是一种特殊的 URL 模式,它精确地映射到应用程序的上下文根,即表单的请求 http://host:port/<contextroot>/。在这种情况下,路径信息是/,servlet 路径和上下文路径是空字符串 ("")。
  • 仅包含字符的字符串/表示应用程序的“默认”servlet。在这种情况下,servlet 路径是请求 URI 减去上下文路径,并且路径信息为空。
  • 所有其他字符串仅用于完全匹配。

当您遇到此错误时,请检查您的 web.xml 和任何映射注释(WebServletWebFilter等)

您可以在JSF 2.0 规范中找到有关 JSF servlet 映射的建议。

使用扩展映射时,建议使用以下映射,但不是必需的:

<servlet-mapping>
<servlet-name> faces-servlet-name </servlet-name>
<url-pattern>*.faces</url-pattern>
</servlet-mapping>
于 2011-03-26T11:17:56.070 回答