从JSF2.0开始,为什么Facelets优先于JSP作为视图定义语言?

从JSF2.0开始,为什么Facelets优先于JSP作为视图定义语言?,jsp,jsf,jsf-2,facelets,Jsp,Jsf,Jsf 2,Facelets,我看到,从JSF2.0开始,Facelets视图定义语言是首选的视图定义语言,而不是JSP,后者已被弃用为传统的后援。我想了解为什么从JSF2.0开始,Facelets作为视图定义语言优先于JSP?我知道JSP还有一些模板行为,这是采用Facelet的主要驱动点 注:我已经通过了stackoverflow,但我不认为它回答了我的问题。因此,将此作为一个单独的问题发布。没错,JSP有一些功能,但在JSF中使用JSP的最大缺点是JSP在遇到模板文本内容时立即写入响应,而JSF希望对其进行一些预/后处

我看到,从JSF2.0开始,Facelets视图定义语言是首选的视图定义语言,而不是JSP,后者已被弃用为传统的后援。我想了解为什么从JSF2.0开始,Facelets作为视图定义语言优先于JSP?我知道JSP还有一些模板行为,这是采用Facelet的主要驱动点

注:我已经通过了stackoverflow,但我不认为它回答了我的问题。因此,将此作为一个单独的问题发布。

没错,JSP有一些功能,但在JSF中使用JSP的最大缺点是JSP在遇到模板文本内容时立即写入响应,而JSF希望对其进行一些预/后处理。在JSF1.0/1.1中,以下JSF代码

<h:outputText value="first"> second <h:outputText value="third"> fourth
second-fourth
会产生

第二第四第一第三

这是在JSF1.0/1.1时代。开发人员需要将上面示例中的
第二个
第四个
这样的模板文本包装在
标记中。JSF1.2通过一个改进的视图处理程序解决了这个问题,该处理程序解析JSP而不是执行它,但它仍然非常笨拙,因为JSP语法不像XML那样“格式良好”。强烈需要基于XML的视图技术,以便使用高效的基于SAX的解析器。Facelets诞生了(在Ken Paulsen的“JSF模板”中)

而且,统一的EL
{}
不能在JSP模板文本中使用,这导致了
${}
{}
的混合,这对初学者来说是一个丑陋的结果。另外,JSF1.x中的JSTL不能用作JSP。而且,带有
东西的JSP语法是老派的,在JSP中嵌入原始Java代码的可能性被认为是一种突破


总而言之,从JSF/MVC的角度来看,JSP简直丑陋可怕,而Facelets简直干净可怕。

我在互联网上找到了以下答案

:

JSP编译时开销

每次编辑、保存和重新加载JSP页面时,服务器的JSP编译器都会生成Javaservlet代码并将其编译成servlet。这称为JSP转换过程,通常需要花费1-2秒,具体取决于服务器性能

Facelets XML编译

与JavaServer页面不同,Facelets页面没有编译成servlet。由于Facelets页面与XML兼容,Facelets框架使用基于SAX的快速编译器来构建视图。此外,Facelets可以配置为立即检测和呈现页面的更改,从而加快JSF开发周期

:

在JSF应用程序开发过程中,我们经常对JSF页面进行更改, 导致频繁地重新编译我们的JSP页面,并缩短了编译时间 开销可以加起来

Facelets页面是从不编译的简单XML文档(XHTMl页面) 对servlet而言,它使用构建UI的基于SAX的编译过程 视图的组件树。因此,Facelets比JSP更快,因为它是 无JSP翻译开销


@BalusC“在JSP模板文本中不能使用统一EL{}”。JSP2.1确实支持统一EL,不是吗?仅在JSP标记中。不在模板文本中。例如,
#{user.name}

在JSP中不起作用。
${}
表单没有。