StringTemplate 和 FreeMarker 之间的主要区别是啥?
Posted
技术标签:
【中文标题】StringTemplate 和 FreeMarker 之间的主要区别是啥?【英文标题】:What are the main differences between StringTemplate and FreeMarker?StringTemplate 和 FreeMarker 之间的主要区别是什么? 【发布时间】:2011-04-14 02:04:20 【问题描述】:网络上似乎充斥着 Velocity 和 FreeMarker 之间的比较,它们似乎相当等价。但是 StringTemplate 和 FreeMarker 之间似乎几乎没有可比性!
那么,StringTemplate 和 FreeMarker 的主要区别是什么?
我对它们的用途是只生成 html 页面。在这两者中,我希望 FreeMarker 更合适,更强大,因为这似乎是更常见的一个 - 但通过快速浏览,似乎 StringTemplate 实际上具有更合适的功能!
如果同时使用过两者的人有时间发表评论,那就太好了 - 对于实际细节,我可以并排阅读文档,但我想开始使用。
【问题讨论】:
快速澄清!我对明显的差异不感兴趣——StringTemplate 是功能性的并且没有循环等,而 FreeMarker 几乎是一种成熟的编程语言!我对使用过程中出现的具体功能差异感兴趣 - 其中一件事很容易做到,而另一件事则非常困难。 【参考方案1】:主要区别在于 StringTemplate 严格执行模型视图分离,您不能将逻辑放入模板中,而 FreeMarker 允许您将完整的逻辑放入模板中.. 这至少在一开始使它更难使用但它更具可扩展性。例如,如果您正在生成代码并且模板中没有逻辑,则为另一种语言生成另一个端口就不会那么乏味了,因为您不必在每个模板中复制逻辑。
Terence Parr 的 a paper 解释了模型视图分离的好处
【讨论】:
谢谢,但请阅读我对问题的说明 - 答案并没有真正告诉我任何我不知道的事情。 论文链接现在失效了【参考方案2】:在厌倦了 JSP 的“模板中的代码”模型后,我设计 ST 来构建 jGuru。速度和朋友(即,我认为的所有其他引擎)为您提供了比您需要的更多的动力。我基本上使用了四个功能来构建 jGuru.com(如paper 中所述)。更多功能是不必要的,并且会导致您将模型纠缠到模板中。如果您正在构建一次性原型,那没关系,任何引擎都可以。在这种情况下,模板中的代码是可以的,因为您不关心维护。
人们似乎忽略了另一件事:图形设计师怎么能阅读模板中的代码?他们不能。那么,他们如何在模板上工作呢?即使更改某些元素的顺序也会破坏您的模型。你真的需要分离才能在商业环境中工作,除非你想要一个看起来像编码器构建 html 的网站;)
【讨论】:
您对ST的了解不够,无法发表评论! ;-) 但说真的,除了模型视图分离之外,我对 其他 功能更感兴趣。模板继承之类的东西,存在于 ST 但不存在于 FM 中,至少以不同的方式存在。在比较 FreeMarker、Velocity 甚至 XSLT 时,似乎没有人考虑 StringTemplate,这似乎很奇怪。 嗨。是的,继承对于避免重复模板至关重要。我在 ANTLR 代码生成中广泛使用它。我有基本的 Java 模板来生成解析器。如果你想要树,我必须注入树构造代码并且不复制整个 Java 组。如果打开-debug,我需要注入调试事件触发器。有时两者兼而有之!继承让您可以描述普通 Java 输出和带有调试/树操作的 Java 输出之间的区别。 继承才是ST的魅力所在!否则,我不喜欢过于严格的 mvc,因为我们没有神话般的图形设计师无法抗拒 MVC 的变化,也无法理解非常简单的 VTL。 然而,很难推荐在 Servlet 环境中使用 StringTemplate,因为it is not threadsafe, nor is there any public commitment to making it so。以上是关于StringTemplate 和 FreeMarker 之间的主要区别是啥?的主要内容,如果未能解决你的问题,请参考以下文章
如何将 StringTemplate 引擎集成到 CherryPy Web 服务器中
springboot中模板 freemark,thymeleaf,jsp
「快学springboot」SpringBoot整合freeMark模板引擎