FreeMarker 的优点:
- FreeMarker 不依赖于Servlet ,网络或Web 环境;它仅仅是通过合并模板和Java 对
象(数据模型)来生成文本输出的类库。你可以在任意地方任意时间来执行模板;
不需要HTTP 的请求转发或类似的手段,也不需要Servlet 环境。出于这些特点你可
以轻松的将它整合到任何系统中去。 - 在模板中没有servlet 特定的范围和其它高级技术。FreeMarker 一开始就是为MVC
设计的,它仅仅专注于展示。
你可以从任意位置加载模板;从类路径下,从数据库中等。 - 默认情况下,数字和日期格式是本地化敏感的。因为我们对用户输出,你所做的仅
仅是书写${x},而不是<fmt:formatNumber value="${x}" />。你
也可以很容易就改变这个行为,默认输出没有本地化的数字。
易于定义特设的宏和函数。
隐藏错误并假装它不存在。丢失的变量默认会引起错误,也不会默认给任意值。而
且null-s 也不会默认视为0/false/空字符串。参见FAQ 第三点来获取更多信息。 - “对象包装”允许你在模板中以自定义,面向表现的方式来展示对象。(比如:参
见XML 处理指南/必要的XML 处理/通过例子来学习部分,来看看使用这种技术时
W3C 的DOM 节点是如何通过模板展现出来的。)
宏和函数仅仅是变量(和JSP 的自定义标记工作方式来比较),就像其它任意值一
样,所以它们可以很容易的作为参数值来传递,放置到数据模型中等。
当第一次访问一个页面时几乎察觉不到的延迟(或在它改变之后),因为没有更高
级的编译发生。 - FreeMarker 的缺点:
- 不是一个标准。很少的工具和IDE 来集成它,少数的开发者知道它,很少的工业化
的支持。(然而,如果没有使用.tag文件,JSP 标签库在FreeMarker 模板中工作
不需要改变)
因为宏和函数仅仅是变量,不正确的指令,参数名和丢失的必须变量仅仅在运行时
会被检测到。
除了一些视觉上的相似性,它的语法不同于 HTML/XML 语法规则,这会使得新用
户感到混乱。(这就是简洁的价值所在)
不能和JSF 一起使用。(这在技术上可行,但是没有人来实现它)
如果你认为可以用FreeMarker 来代替JSP ,你或许可以阅读这部分内容:程序开发指南
/其他/在servlets 中使用FreeMarker/在“Model 2”中使用FreeMarker。