这几天在做项目的时候,用到了一种之前没有使用过的技术——freeMarker。
先看看百度百科的解释:
FreeMarker允许Java servlet保持图形设计同应用程序逻辑的分离,这是通过在模板中密封HTML完成的。模板用servlet提供的数据动态地生成 HTML。模板语言是强大的直观的,编译器速度快,输出接近静态HTML页面的速度。
FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写
FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用程序
虽然FreeMarker具有一些编程的能力,但通常由Java程序准备要显示的数据,由FreeMarker生成页面,通过模板显示准备的数据
FreeMarker不是一个Web应用框架,而适合作为Web应用框架一个组件
FreeMarker与容器无关,因为它并不知道HTTP或Servlet;FreeMarker同样可以应用于非Web应用程序环境
FreeMarker更适合作为Model2框架(如Struts)的视图组件,你也可以在模板中使用JSP标记库
FreeMarker是免费的。
我个人的理解就是freeMarker相当于jsp页面,也就是可以作为MVC中的V(界面)。
freeMarker包含两大部分。一部分是ftl文件,相当于html,作用是图形展示;另一部分是data module,一般情况是类似于pojo的类,里面存储需要在页面展示的数据。
freeMarker有一些专用的语法,比如if指令等等。
引用一下百度百科的例子:
java代码:
package freemarker;
import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class Test1 {
private Configuration cfg;
public Configuration getCfg() {
return cfg;
}
public void init() throws Exception {
cfg = new Configuration();
cfg.setDirectoryForTemplateLoading(new File("bin/freemarker"));
}
public static void main(String[] args) throws Exception {
Test1 obj = new Test1();
obj.init();
Map root = new HashMap();
Template t = obj.getCfg().getTemplate("Test1.ftl");
Writer out = new OutputStreamWriter(new FileOutputStream("Test1.html"), "GBK");
t.process(root, out);
System.out.println("Successfull................");
}
}
ftl代码:
<#macro greet person,website>
Hello ${person}! Your Website is ${website}.
</#macro>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<@greet person="姓名" website="www.java2000.net"/>
</body>
</html>
页面输出:
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello 姓名! Your Website is <a target="_blank" href="http://blog.csdn.net/sxyandapp">http://blog.csdn.net/sxyandapp</a>
</body>
</html>
这个例子的前一段代码展示的是一个普通的data module,里面存储一些需要在前台展示的数据,这些数据可以来自任何地方。后一段代码展示的是一个ftl页面,用来向用户展示数据。
freeMarker允许Java servlet保持图形设计同应用程序逻辑的分离(这句貌似百科已经说过了),这样后台代码开发和前台页面设计就不用可以关心数据是怎样传输及对应的了,降低了耦合性。