我看到了一些使用.jsp扩展名创建JSF页面的示例,其他使用.xhtml扩展名创建示例的示例,以及其他示例选择的示例.jsf。我只想知道在使用JSF页面时上述扩展之间有什么区别,以及如何选择适当的扩展?
.jsp
.xhtml
.jsf
JSP是一种旧的视图技术,已广泛与JSF1.x结合使用。Facelets(有些人被普遍称为XHTML)是JSP的继承者,并于2009年底作为JSF2.x的默认视图技术引入。当您看到JSP时,您可能正在阅读针对JSF 1的过时书籍,教程或资源。 。X。在使用JSF 2.x进行开发时,通常应该忽略它们,而转到针对JSF 2.x的资源,否则您可能会陷入混乱,因为在Facelets上的JSF 2.x中许多事情都以不同的方式进行。
该*.jsf是对广泛使用的URL模式只是一个FacesServlet中映射web.xml。其他的是*.faces和/faces/*,但是这些来自JSF1.0 /1.1时代。它们均不代表具体的文件扩展名/路径,而仅代表虚拟文件扩展名/路径,并且只能在URL中指定,例如http://example.com/contextname/page.jsf。如果您熟悉基本的Servlet,那么您应该知道,当请求URL与Servlet的URL模式匹配时,servletcontainer将调用servlet。因此,当请求网址匹配时*.jsf,FacesServlet将以这种方式调用。使用JSP时,它实际上会执行page.jsp。使用Facelets时,实际上可以进行编译page.xhtml。
*.jsf
FacesServlet
web.xml
*.faces
/faces/*
page.jsp
page.xhtml
从JSF 2.x开始,您还可以将其*.xhtml用作URL模式。这样,您无需在指定URL时感到困惑。*.xhtml在带有Facelets 1.x的JSF 1.x中不可能使用URL模式,因为FacesServlet它将随后在无限循环中运行,每次都调用它自己。使用的另外一个优势*.xhtml是,最终用户将无法看到原始JSF的源代码,只要最终用户有意改变来自例如在浏览器地址栏中的URL扩展.jsf到.xhtml。不能将其*.jsp用作URL模式,因为这样一来JspServlet,已经使用该URL模式的容器内建函数将被覆盖,然后FacesServlet将无法再以JSP为基础。
*.xhtml
*.jsp
JspServlet