JSTL有哪些替代方案?

2022-09-03 05:02:44

JSTL 还有其他选择吗?3年前,我工作的一家公司使用JSTL和自定义标签库将表示与逻辑分开。前端开发人员使用EL来执行复杂的表示逻辑,在JSP页面中生成布局,效果很好。也许新技术已经出现。这些天有什么好吗?


答案 1

JSTL 和 EL 是两个不同的概念。

JSTL 只是一个标签库。大多数框架都提供自己的 taglib,大约复制了 JSTL 的功能。我说近似,因为这些经常误用或忽略JSP和Servlet API的关键原则。

JSTL的优势在于它是由JSP的作者设计的,对JSP和servlets有扎实的了解。第三方taglibs通常由一些不想RTFM并决定“从头开始”并提出“更简单”的人创建的。但是,JSTL并不是要做所有事情。它可以非常成功地与其他taglib结合使用,包括您自己的自定义标签。

表达式语言是 JSP 的基础。它由容器解释,可以在许多上下文中使用。它也在很大程度上没有副作用,并且具有简单,易于理解的语法,不允许将大量逻辑塞入表示层。作为Java EE规范的一部分,它还享有广泛的工具支持。例如,许多 IDE 可以在重命名属性时重构依赖 EL 表达式。

Struts2向更广泛的受众介绍了OGNL。OGNL是回归到脚本的邪恶时代。它更强大,因此开发人员很乐意滥用它来调用表示层中的任意方法和其他暴行。攻击者也很乐意利用它;它是基于 Struts2 的应用程序中漏洞的常见来源。

我从多年的WebWork经验中熟悉了OGNL,而我对Struts2最大的失望是未能抛弃这个dreck。*幸运的是,它只能在有限的上下文中使用,比如OGNL感知标签(以及其他一些令人惊讶的地方),不像EL,它是由容器本身支持的,可以在页面的任何地方使用。

如果你想摆脱JSP,但不喜欢像JSF这样的基于组件的方法,你可以看看Terrence Parr的StringTemplate项目。重点是无副作用,这为安全性和可扩展性提供了有价值的改进。

QFT:在对基于Struts2的Apple Developer网站进行成功攻击后,Patrick Lightbody说:“可悲的是,我对这个相当大的安全漏洞感到有些责任。有一些这样的,它们都植根于这样一个事实,即大约9年前我做出了使用OGNL作为WebWork表达语言的(糟糕的)决定。我这样做是因为它'强大',但它打开了我从未想过的各种额外的绑定技巧。


答案 2

我使用速度取得了巨大的成功,它作为将业务逻辑与表示逻辑分开的简单方法非常有用。而且它非常简单,您的普通Web开发人员可以理解它。Freemarker是另一种模板化替代方案,很多人也喜欢。