一尘不染

用.jsp或.xhtml或.jsf扩展名创建JSF页面之间有什么区别

jsp

我看到了一些使用.jsp扩展名创建JSF页面的示例,其他使用.xhtml扩展名创建示例的示例,以及其他示例选择的示例.jsf。我只想知道在使用JSF页面时上述扩展之间有什么区别,以及如何选择适当的扩展?


阅读 230

收藏
2020-06-08

共1个答案

一尘不染

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。因此,当请求网址匹配时*.jsfFacesServlet将以这种方式调用。使用JSP时,它实际上会执行page.jsp。使用Facelets时,实际上可以进行编译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为基础。

2020-06-08