FreeMarker  的优点:

  1. FreeMarker 不依赖于Servlet ,网络或Web 环境;它仅仅是通过合并模板和Java  对

    象(数据模型)来生成文本输出的类库。你可以在任意地方任意时间来执行模板;

    不需要HTTP 的请求转发或类似的手段,也不需要Servlet 环境。出于这些特点你可

    以轻松的将它整合到任何系统中去。 
  2. 在模板中没有servlet 特定的范围和其它高级技术。FreeMarker 一开始就是为MVC
     设计的,它仅仅专注于展示。
     你可以从任意位置加载模板;从类路径下,从数据库中等。 
  3. 默认情况下,数字和日期格式是本地化敏感的。因为我们对用户输出,你所做的仅

    仅是书写${x},而不是<fmt:formatNumber value="${x}" />。你

     也可以很容易就改变这个行为,默认输出没有本地化的数字。
     易于定义特设的宏和函数。

     隐藏错误并假装它不存在。丢失的变量默认会引起错误,也不会默认给任意值。而

     且null-s 也不会默认视为0/false/空字符串。参见FAQ 第三点来获取更多信息。
  4. “对象包装”允许你在模板中以自定义,面向表现的方式来展示对象。(比如:参

      见XML 处理指南/必要的XML 处理/通过例子来学习部分,来看看使用这种技术时
      W3C  的DOM 节点是如何通过模板展现出来的。)

      宏和函数仅仅是变量(和JSP             的自定义标记工作方式来比较),就像其它任意值一

       样,所以它们可以很容易的作为参数值来传递,放置到数据模型中等。

      当第一次访问一个页面时几乎察觉不到的延迟(或在它改变之后),因为没有更高

      级的编译发生。
  5. FreeMarker  的缺点: 
  6. 不是一个标准。很少的工具和IDE 来集成它,少数的开发者知道它,很少的工业化

     的支持。(然而,如果没有使用.tag文件,JSP 标签库在FreeMarker 模板中工作

     不需要改变)

     因为宏和函数仅仅是变量,不正确的指令,参数名和丢失的必须变量仅仅在运行时
     会被检测到。

     除了一些视觉上的相似性,它的语法不同于 HTML/XML                      语法规则,这会使得新用

    户感到混乱。(这就是简洁的价值所在)

    不能和JSF 一起使用。(这在技术上可行,但是没有人来实现它)

    如果你认为可以用FreeMarker 来代替JSP ,你或许可以阅读这部分内容:程序开发指南
    /其他/在servlets  中使用FreeMarker/在“Model 2”中使用FreeMarker。