我正在尝试部署一个非常简单的&我在glassfish本地服务器上的第一个JSF应用程序(在really good tutorial by BalusC之后)。我完成了创建应用程序的所有步骤。当我尝试在glassfish服务器上部署应用程序时,它失败并出现以下异常消息: -
cannot Deploy Playground
Deployment Error for module: Playground: Exception while deploying the app :
java.lang.IllegalArgumentException: Invalid URL Pattern: [xhtml]
有谁可以解释故障在哪里,我该如何修改?
答案 0 :(得分:4)
这不是有效的网址格式。您可以将映射排列为前缀映射或扩展映射(来自JSF 2.0 specification):
前缀映射:
<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>
答案 1 :(得分:4)
您的<url-pattern>
必须包含扩展名匹配(以*
开头)或前缀匹配(以/
开头),而不仅仅是xhtml
。
以下是我的做法。
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
答案 2 :(得分:3)
servlet映射的规则包含在Servlet 3.0 specs:
中映射规范
在Web应用程序部署中 描述符,以下语法是 用于定义映射:
- 以
/
字符开头且以/*
结尾的字符串 后缀用于路径映射。- 以
*.
前缀开头的字符串用作扩展名 映射。- 空字符串(“”)是一个特殊的URL模式,它完全映射到 应用程序的上下文根,即 表格的要求
http://host:port/<contextroot>/
。在 在这种情况下,路径信息是/
和 servlet路径和上下文路径为空 string(“”)。- 仅包含
/
字符的字符串表示“默认” 应用程序的servlet。在这 case servlet路径是请求 URI减去上下文路径和 路径信息为空。- 所有其他字符串仅用于完全匹配。
当您遇到此错误时,请检查您的web.xml和任何地图注释(WebServlet,WebFilter等)。
您可以在JSF 2.0 spec中找到有关JSF servlet映射的建议。
使用扩展名映射时 建议使用以下映射,但是 不需要:
<servlet-mapping> <servlet-name> faces-servlet-name </servlet-name> <url-pattern>*.faces</url-pattern> </servlet-mapping>