尝试学习JSF,有时我看到网址为*.jsf
,有时为*.xhtml
或/faces/*
。请问有人填写我的知识吗?当我使用Facelet创建JSF时,文件扩展名为.xhtml
,那么.jsf
网址扩展来自哪里?
答案 0 :(得分:97)
.jsf
扩展名是FacesServlet
在web.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。