JSF 页面的 URL 模式由<servlet-mapping>inFacesServlet指定web.xml。正如您提到的那样.xhtml工作正常,您显然已将其配置如下:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
您需要<url-pattern>相应地更改以获得所需的虚拟 URL 扩展名。
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.jsf</url-pattern>
</servlet-mapping>
这就是您真正需要更改的所有内容,以实现具体的功能需求。
然而,这带来了一个安全问题。.jsf将 URL 中的扩展名从更改回 时,最终用户现在可以看到原始 Facelets 文件源代码.xhtml。您可以通过添加以下安全约束来防止这种情况web.xml:
<security-constraint>
<display-name>Restrict access to Facelets source code.</display-name>
<web-resource-collection>
<web-resource-name>Facelets</web-resource-name>
<url-pattern>*.xhtml</url-pattern>
</web-resource-collection>
<auth-constraint/>
</security-constraint>