JSTL有哪些替代品?

16

有没有 JSTL 的替代品?我三年前曾在一家公司使用了 JSTL 和自定义标签库来将页面和逻辑分离。前端开发人员使用 EL 来完成复杂的呈现逻辑,在 JSP 页面中生成布局效果很好。也许现在新技术已经出现了,有更好的选择吗?

6个回答

18

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

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

JSTL的优势在于它是由JSP的作者设计的,对JSP和servlet有深入的了解。第三方标签库通常是由某个人创建的,他不想阅读文档,决定“从头开始”设计“更简单”的东西。但是,JSTL并不打算做所有的事情。它可以与其他标签库(包括您自己的自定义标签)非常成功地配合使用。

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

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

我熟悉OGNL,这是由于我在WebWork中多年的经验,而我对Struts2最大的失望是未能放弃它。甚至WebWork的创始人Patrick Lightbody承认采用OGNL是一个错误。*幸运的是,它只能在有限的上下文中使用,例如OGNL-aware标签(和其他一些令人惊讶的地方),而EL则由容器本身支持,并且可以在页面的任何位置使用。

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

* QFT:在成功攻击基于Struts2的Apple Developer网站后,Patrick Lightbody说:“遗憾的是,我感到对这个相当重要的安全漏洞负有一定责任。类似的情况已经发生过几次,根源在于将近9年前我做出了(错误的)决定,使用OGNL作为WebWork的表达式语言。我这样做是因为它很‘强大’,但它打开了所有种类的额外绑定技巧,这不是我的本意。”


6

我曾经非常成功地使用过Velocity,它非常适合将业务逻辑与展示逻辑分离。而且它足够简单,普通的Web开发人员也能理解。还有另一个模板选择,Freemarker,很多人也喜欢使用。


3

JSTL是一个包含逻辑函数的标签库,可以在JSP页面内使用。还存在其他类似的库,但您可能希望查看对整个jsp/jstl解决方案进行修订的方法。

最值得注意的是,我建议您查看:

Apache Wicket

JSF与facelets

Google Web Toolkit(GWT)


3
JSTL鼓励您在UI中加入逻辑。相反,尝试使用Apache Wicket,在那里逻辑是通过Java完成的。

同意,Wicket 的关注点分离原则是最干净的。 - jonathan.cone

1

假设你正在寻找一种更容易使用MVC开发应用程序的方法,我强烈推荐您查看Spring Framework。Spring有自己的标记库,在JSP中提供了大部分所需的功能。我在使用Spring webflow以及Spring表单标签库方面取得了巨大的成功。我喜欢将应用程序分成持久层(使用Spring对Hibernate的ORM支持)、服务层(业务逻辑)和视图层。视图层包括Web流程、JSP和用于验证和操作的POJO。我还在视图层中使用了DWR进行AJAX调用。


0

我不会说它们是替代品或者选择,但我认为Java-Server-Faces在将表现和逻辑分离方面更进了一步...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接