JSF Facelets:有时我会看到URL是.jsf,有时是.xhtml。 为什么?
一直试图学习JSF,有时我看到的URL是.jsf
,有时是.xhtml
。 有人可以填补我的知识吗? 当我使用Facelet创buildJSF时,文件扩展名为.xhtml
,那么.jsf
URL扩展名是从哪里来的?
.jsf
扩展是FacesServlet
通常默认映射到web.xml
。
<servlet-mapping> <servlet-name>facesServlet</servlet-name> <url-pattern>*.jsf</url-pattern> </servlet-mapping>
.xhtml
扩展名是实际放置在Web应用程序的webcontent中的实际 Facelets文件,例如Webapp/WebContent/page.xhtml
。
如果使用.jsf
扩展名(例如http://localhost:8080/webapp/page.jsf
调用此页面,则将调用FacesServlet
,findpage.xhtml
文件并parsing/呈现其JSF组件。 如果FacesServlet
没有被调用,那么最终用户最终将得到原始的XHTML源代码(可以通过右键单击View Source查看 )。
有时会使用*.faces
扩展名或/faces/*
夹映射。 但是这是从JSF 1.0 / 1.1时代开始的。 你可以自由select和使用你希望让FacesServlet
监听的映射,即使它不是一个说*.xyz
。 实际的页面本身应该总是具有.xhtml
扩展名,但是这可以通过web.xml
<context-param>
来configuration:
<context-param> <param-name>javax.faces.DEFAULT_SUFFIX</param-name> <param-value>.xml</param-value> </context-param>
这将改变FacesServlet
来定位(默认) 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>
这样,无论何时,当最终用户将URL中的.jsf
更改为浏览器地址栏中的.xhtml
,您都不需要configuration某些安全性限制来隐藏原始源文件。 只有工具(IDE和插件)和学习资源仍然需要赶上从*.jsf
到*.xhtml
的主张。 按照JSF 2.3, FacesServlet
默认会在*.xhtml
上自动注册(在/faces/*
, *.faces
和*.jsf
)。 这是回到了Mojarra 2.2.11。
也可以看看:
- 在JSF项目中通过<welcome-file>设置默认主页
- JSF使用plain / raw XHTML / XML / EL源返回空白/未分析的页面,而不是呈现的HTML输出
- 使用.jsp或.xhtml或.jsf扩展名创buildJSF页面有什么区别?
- 我需要将哪些XHTML文件放在/ WEB-INF中,哪些不是?