有时我看到JSF URL是* .jsf,有时是* .xhtml,有时是/ faces / *。为什么?

时间:2010-06-09 17:48:27

标签: jsf web.xml facelets url-pattern

尝试学习JSF,有时我看到网址为*.jsf,有时为*.xhtml/faces/*。请问有人填写我的知识吗?当我使用Facelet创建JSF时,文件扩展名为.xhtml,那么.jsf网址扩展来自哪里?

1 个答案:

答案 0 :(得分:97)

.jsf扩展名是FacesServletweb.xml中经常映射的JSF 1.2期间的位置。

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

.xhtml扩展程序属于实际 Facelets文件,因为您实际放置在webapp的webcontent中,例如Webapp/WebContent/page.xhtml

如果您使用.jsf扩展程序调用此页面,例如http://localhost:8080/webapp/page.jsf然后将调用FacesServlet,找到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>

这会将FacesServlet更改为{默认} page.xml的{​​{1}}个实例。

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

http://localhost:8080/webapp/page.xhtml

这样,您无需配置一些安全限制来隐藏原始源文件,以防止最终用户在浏览器地址栏中将<servlet-mapping> <servlet-name>facesServlet</servlet-name> <url-pattern>*.xhtml</url-pattern> </servlet-mapping> 更改为.jsf的情况。只有工具(IDE和插件)和学习资源仍然需要赶上从.xhtml*.jsf的主流行动。根据JSF 2.3,*.xhtml默认情况下也会在FacesServlet上自动注册(*.xhtml/faces/**.faces旁边)。这被移植到Mojarra 2.2.11。

另见: