58

一直在尝试学习JSF,有时我看到的URL 是*.jsf有时是*.xhtml/faces/*。有人可以补充我的知识吗?当我使用 Facelet 创建 JSF 时,文件扩展名为.xhtml,那么.jsfURL 扩展来自哪里?

4

1 回答 1

102

.jsf扩展是在FacesServletJSF 1.2 期间经常映射到web.xml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

.xhtml扩展名是实际Facelets 文件的扩展名,因为您实际放置在 web 应用程序的 web 内容中,例如Webapp/WebContent/page.xhtml.

如果您使用.jsf扩展名调用此页面,例如http://localhost:8080/webapp/page.jsfFacesServlet将调用该页面,定位page.xhtml文件并解析/呈现其 JSF 组件。如果FacesServlet没有调用,那么最终用户最终会得到原始的 XHTML 源代码(可以通过右键单击查看源代码来查看)。

有时会使用*.faces扩展名或/faces/*文件夹映射。但这是从 JSF 1.0/1.1 时代开始的。您可以自由选择和使用任何您FacesServlet想听的映射,即使它是无话可说的*.xyz。实际页面本身应始终具有.xhtml扩展名,但这可以通过以下内容<context-param>进行配置web.xml

<context-param>
    <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
    <param-value>.xml</param-value>
</context-param>

这将改变FacesServletto locate page.xmlinstad of (default) page.xhtml

最近,在 JSF/Facelets 2.0*.xhtml中使用了映射。在 JSF/Facelets 1.x 中,不可能使用与物理文件相同的映射扩展名。这将导致无限循环。但由于 JSF/Facelets 2.0 是可能的,这允许您通过http://localhost:8080/webapp/page.xhtml.

<servlet-mapping>
    <servlet-name>facesServlet</servlet-name>
    <url-pattern>*.xhtml</url-pattern>
</servlet-mapping>

这样,您无需配置一些安全限制来隐藏原始源文件,以应对最终用户.jsf在 URL 中更改为.xhtml浏览器地址栏中的情况。只有工具(IDE 和插件)和学习资源仍然需要赶上提倡的*.jsf*.xhtml. 根据 JSF 2.3,FacesServlet默认情况下也会自动注册(在和*.xhtml旁边/faces/*)。这是向后移植到 Mojarra 2.2.11。*.faces*.jsf

也可以看看:

于 2010-06-09T18:01:39.150 回答