由于您
/index.xhtml用作欢迎文件,因此您还应该将FacesServlet映射到该扩展名。
如果不需要现有的前缀映射,请替换为:
<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern></servlet-mapping>
否则,只需添加
*.xhtml模式即可,最终结果是:
<servlet-mapping> <servlet-name>Faces Servlet</servlet-name> <url-pattern>*.xhtml</url-pattern> <url-pattern>/faces/*</url-pattern></servlet-mapping>
请注意,您几乎总是希望在
*.xhtml那里进行映射,以防止将Facelets的源代码公开。
更新:
关于.jsf和.xhtml之间的区别:
.jsf是默认映射之一(如果您在JSF
2.1中根本没有声明FacesServlet,那么您将获得它)。它源于磁盘上物理文件具有的扩展名(.jsp或.xhtml)与URL中使用的扩展名之间的区别。
不幸的是,这些在历史上是不同的,因为JSF是一种附加技术,必须通过单独的显式Servlet(Faces
Servlet)进行。纯JSP从来没有此限制,因为它是内置的。JSF页面最初只是在JSP中编写的,因此,如果您仅在URL请求中使用.jsp,则该容器将直接转到JSP并跳过Faces
Servlet。
因此,必须为此发明一种解决方法,那就是将Faces Servlet映射到
*.jsf,然后Faces
Servlet将直接定向到JSP文件,该文件
.jsp在磁盘上仍具有扩展名。
我个人认为
*.xhtml,
*.xhtml映射简单是唯一可行的即开即用选项,但是由于向后兼容,JSF似乎无法再将其设置为默认选项。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)