认识freemarker

来源:互联网 发布:植物基因组数据库 编辑:程序博客网 时间:2024/05/21 09:10

一、什么是freemarker?

  • Apache FreeMarker™ is a template engine:
    Apache FreeMarker是一种模板引擎

  • a Java library to generate text output (HTML web pages, e-mails, configuration files, source code, etc.) based on templates and changing data。
    它是一种基于模板和要改变的数据,并用来生成输出文本(HTML网页,电子邮件,配置文件,源代码等)的java library 通用工具。

  • Templates are written in the FreeMarker Template Language (FTL), which is a simple, specialized language (not a full-blown programming language like PHP).
    模板是用简单,专用的 FreeMarker模板语言FTL编写的,不像PHP那样成熟的编程语言。

  • You meant to prepare the data to display in a real programming language, like issue database queries and do business calculations, and then the template displays that already prepared data. In the template you are focusing on how to present the data, and outside the template you are focusing on what data to present.
    那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。

这里写图片描述

二、使用freemarker的优势

在Java领域,表现层技术主要有三种:jsp、freemarker、velocity。相比较其他两个而言,freemarker具有以下的好处。

1、freemarker优点:

  • 不能编写java代码,可以实现严格的MVC分离
  • 对jsp标签标签支持良好
  • 内置大量常用功能,使用非常方便
  • 宏定义非常方便
  • 可以使用表达式语句

2、选择freemarker的优势:

  • 在复杂的页面上(包含大量的判断、日期金额格式化)的页面上,freemarker的性能比使用tag和EL的jsp好
  • 相比较jsp而言,jsp需要访问Dao层获取数据,生成htlm页面,返回到浏览器,而freemarker则是提前根据模板生成html的静态页面,访问的时候就直接访问静态页面。

三、通过实例理解freemarker

程序结构图如下:

这里写图片描述

1、导入freemarker jar包
下载freemarker 的jar包,放到WEB-INF下的lib文件夹中,自动Add to build path…

2、在src下创建ftl文件夹存放模板文件person.ftl,使用ELperson.ftlhtml{} 获取值

 Hello! my name is ${name}.  I come from ${address}.  Nice to meet you! Bye!

3、创建测试类FreeMarker.java

package com.fm;import java.io.File;import java.io.IOException;import java.io.OutputStreamWriter;import java.io.Writer;import java.util.HashMap;import java.util.Map;import freemarker.template.Configuration;import freemarker.template.DefaultObjectWrapper;import freemarker.template.Template;import freemarker.template.TemplateException;import freemarker.template.Version;public class FreeMarkerTest{    public static void main(String[] args) throws IOException, TemplateException    {        Version version = new Version(2, 3, 1);        Configuration cfg = new Configuration(version);        cfg.setDirectoryForTemplateLoading(new File("ftl"));        cfg.setObjectWrapper(new DefaultObjectWrapper(version));        Template temp = cfg.getTemplate("person.ftl");        Map root = new HashMap();        root.put("name", "张三");        root.put("address", "中国-北京");        Writer out = new OutputStreamWriter(System.out);        temp.process(root, out);        out.flush();    }}

4、最后的输出结果

这里写图片描述

参考资料:
https://freemarker.apache.org/
http://swiftlet.net/archives/905
http://blog.csdn.net/chenghui0317/article/details/7832474

原创粉丝点击