FreeMarker特别适应于MVC模式的web应用,虽然FreeMarker具有一些编程能力,但这种编程能力非常有限,无法实现业务逻辑,保能提供一些数据格式的转换。因此,通常由Java程序准备要显示的数据,由FreeMarker模板引擎来生成页面,而FreeMarker模板则则提供页面布局支持,从而能更好地规范MVC架构,保证视图和业务逻辑的分离。
除此之外,FreeMarker也是与web容器,也就是FreeMarker并不一定需要运行在web容器中。FreeMarker同样可以应用于非web应用程序环境。而且,FreeMarker并不是只能生成Html页面,它也可以生成各种文本,如xml,rtf,java程序。
struts2可以非常简单地使用FreeMarker模板作为视图技术,对于传统的jsp页面而言,FreeMarker是一个绝佳的替代方案。
除此之外,Struts2默认采用FreeMarker作为其模板文件,而Struts2所有的主题模板文件都是采用FreeMarker编写的。因此,如果我们需要扩展struts2的主题,也需要熟悉FreeMarker技术。
为了使用FreeMarker来将数据模型中的值合并到模板文件中
一般情况下按下述步骤操作
第一步:创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例
第二步:使用Configuration实例来生成Template实例,同时需要指定模板文件
第三步:填充数据模型,数据模型就是一个Map对象
第四步:调用Template实例的process方法完成合并
在web应用中使用FreeMarker与在Java应用使用并没有太大的区别,一样需要定义模板文件,但此时的模板文件应该是HTML模板---也就是该板块能生成一个HTML页面。
在JAVA程序中使用FreeMarker
package ish;
import java.util.*;
import java.io.*;
import freemarker.template.*;
public class HelloFreeMarker
{
private Configuration cfg;
public void init() throws Exception
{
//第一步
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模版文件位置
cfg.setDirectoryForTemplateLoading(new File("templates"));
}
public void process()throws Exception
{
//第二步
Template t = cfg.getTemplate("test.ftl");
t.process(root, new OutputStreamWriter(System.out));
//第三步
Map root = new HashMap();
root.put("name", "FreeMarker!");
root.put("msg" , "您已经完成了第一个FreeMarker的示例");
}
public static void main(String[] args)throws Exception
{
HelloFreeMarker hf = new HelloFreeMarker();
hf.init();
//第四步
hf.process();
}
}
来源:oschina
链接:https://my.oschina.net/u/1455528/blog/226734