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中,哪些不是?