Java-Server-Faces 是一种被很多人低估的 Web 技术。这是为什么?如果你还在使用 JSF,你真的疯了吗?

规范

首先,JSF 是一种规范,与 JSF 通常与之相比的所有其他技术相比,它具有重要优势。该规范是一个开放的过程,多年来一直伴随着许多开发人员为 Web 应用程序定义一个通用的可靠标准。这个规范过程最近发生在 Eclipse Foundation 中,它建立了遵循非常高质量标准的规则。这是最大的优势之一,因为它保证您的 Web 应用程序构建在一个坚实的核心之上。当然,其他 Web 框架也有大型社区,但这些社区通常由一家公司代表,并不总是将开发人员考虑在内。来自 Google 的 Angular 只是一个例子。

基于服务器的框架

但回到 JSF。为什么 JSF 有时会被嘲笑为过时的技术?我个人是在 2001 年初开始使用 JSF 的。所以它显然是一项古老的技术。我也是一个老开发者;-)。与此同时,许多其他 Web 框架也在发展。其中许多基于 JavaScript,并遵循在浏览器中运行的单页范例 (SPA)。这个想法是将应用程序逻辑移动到浏览器中以更快地获取应用程序。这个想法是在不是每个人都对 JSF 感到满意的时候提出的,并且 JavaScript 开始流行起来。Java Server Faces——顾名思义——相反,是一个基于服务器的框架。这意味着应用程序逻辑在服务器上执行。这就是我们有很大不同的地方。当时,减少服务器负载是一个有效的论据。而且当然,这在今天仍应是一个可取的目标。但是,以此作为反对 JSF 的论据的人通常是对无服务器功能赞不绝口的人。因此,我认为我们今天不应该将基于服务器的框架视为愚蠢的想法。

自包含的微服务

基于服务器的 Web 框架提供了一些优势。这样,应用逻辑和业务逻辑可以很容易地耦合。这是在 Jakarta EE 中实现的,主要是通过 CDI、EJB 和 JPA。这些技术是 JSF 组件的后端。Jakarta EE 对层的分离提供了非常清晰的理解,而 JSF 无缝地融入了这一概念。服务器端实现还对客户端隐藏了应用程序细节。相比之下,在 JavaScript SPA 中,大部分应用程序逻辑通常在浏览器中不受保护,这在某些情况下可能存在安全风险。

因此,在服务器端呈现应用程序逻辑使负责后端和前端部分的开发人员更容易。这导致在许多情况下可以更快地开发应用程序。从微服务架构的角度来看,一个 JSF 应用程序对应于Self-Contained Services的原则。这是微服务架构中常用的一种模式。

简单

由于 JSF 通常被称为复杂和笨拙,我最近想知道这是否真的如此。我将我的一个 Vue.js SPA 迁移到 JSF 4.0 并比较了生成代码的复杂性。所以最后,我想通过一个例子来展示 JSF 的简单性。(注意:我这里不比较 JavaScript 代码和 Java)

在 JavaScript 框架中,您通常通过附加标记将 HTML 标记绑定到某些代码。

<!-- Vue.js --><input type="text" name="userwebsite" v-model="userwebsite" placeholder="enter your website">Your Website is: <span>{{api}}</span>

SPA 框架解析标签 (v-model) 并从用 JavaScript 编写的模型中放置正确的值。它还绑定输入字段以跟踪模型中的更改。

JSF 对应项看起来并没有太大不同:

<!-- JSF --><h:inputText value="#{userController.website}" pt:placeholder="enter your website" />Your Website is: <h:outputText value="#{userController.website}" />

在这里,您还将模型值绑定到输入字段或输出文本。但是代码在服务器端用 Java 执行,这通常等同于用 Java 编写的后端代码,也适用于 SPA。

开箱即用的 JavaScript Web 框架使用 Ajax。所以你通常不需要关心它。在上面的例子中,span,一个标签会在输入值改变时自动更新。

在 JSF 中,您也使用 Ajax,但您可以更好地控制它的行为方式。您可以简单地使用 f:ajax 标记将页面的一部分括起来以获得相同的行为:

<!-- JSF --><f:ajax> <h:inputText value="#{userController.website}" pt:placeholder="enter your website" /> Your Website is: <h:outputText value="#{userController.website}" /><f:ajax>

另一个例子是链接。在 JavaScript 框架中,当用户单击元素时,您再次使用一种标记来启动渲染生命周期:

<!-- Vue.js --><li class="nav-item" v-on:click="showSection('search')"> <label>Search</label></li>

在您的showSectionJavaScript 代码中实现一些业务逻辑,并负责处理数据和更改布局。

JSF 并没有太大的不同:

<!-- JSF --><li class="nav-item"> <h:link outcome="search" > <label>Search</label></li>

该h:link标记从名为“search.xhtml”的后端加载一个包含新布局的新页面。所有模型绑定都在后台后台处理。对于用户而言,行为没有区别。

因此,正如您从标记中看到的那样,没有太大区别,编写 JSF 前端并不像在基于 JavaScript 的 Web 框架中那样复杂。

我个人的结论是,JSF 为我在框架内编写代码提供了更清晰、更一致的概念。后端逻辑和应用程序设计结合在一种技术中,从而形成一种模式,也称为自包含微服务。

对我来说,即使对于现代 Web 应用程序来说,这也是一个有效的概念。而在服务器端计算应用逻辑一点也不疯狂。

使用 JSF 版本 4.0,您会发现一种现代且设计良好的 Web 技术嵌入到最新的Jakarta EE 10 框架中。

举报/反馈

墨谈科技

3.4万获赞 4721粉丝
科技类博主,每天分享最新,最流行的科技产品与技术,谢谢大家关注,点赞。
关注
0
0
收藏
分享