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>