步骤如下:
①创建Configuration实例,该实例负责管理FreeMarker的模板加载路径,负责生成模板实例。
②使用Configuration实例来生成Template实例,同时需要指定使用的模板文件。
③填充数据模型,数据模型就是一个Map对象。
④调用Template实例的process方法完成合并。
根据上面步骤,下面提供一个使用FreeMarker创建输出的Java程序,该程序代码如下:
public class HelloFreeMarker {
//负责管理FreeMarker模板文件的Configuration实例
private Configuration cfg;
//负责初始化Configuration实例的方法
public void init() throws Exception {
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模板文件位置
cfg.setDirectoryForTemplateLoading(new File(\"templates\"));
}
//处理合并的方法
public void process() throws Exception {
//创建数据模型
Map root = new HashMap();
root.put(\"name\
root.put(\"msg\您已经完成了第一个FreeMarker的实例!\");
//使用Configuration实例来加载指定模板
Template t = cfg.getTemplate(\"test.flt\");
//处理合并
t.process(root, new OutputStreamWriter(System.out)); }
public static void main(String[] args) throws Exception {
HelloFreeMarker hf = new HelloFreeMarker();
hf.init();
hf.process(); } }
上面代码创建了一个Map实例root,这个root将作为模板文件的数据模型,在该数据模型中存储了两个
key-value对,其中第一个是name,第二个是msg,这两个key都有对应的value,这两个value将会填充到模板中对应的插值处。
虽然FreeMarker可以在Java中使用,但大部分时候FreeMarker都用于生成HTML页面。
下面介绍在Web应用中使用FreeMarker,用Servlet来合并模板和数据模型,下面是Servlet应用中的代码:
public class HelloServlet extends HttpServlet {
//负责管理FreeMarker模板文件的Configuration实例
private Configuration cfg;
//负责初始化Configuration实例的方法
public void init() throws Exception {
//初始化FreeMarker配置
//创建一个Configuration实例
cfg = new Configuration();
//设置FreeMarker的模板文件位置
cfg.setServletContextForTemplateLoading(getServletContext(), \"WEB-INF/templates\"); }
//生成用户响应
public void service(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
//创建数据模型
Map root = new HashMap();
root.put(\"message\
//使用Configuration实例来加载指定模板,即:取得模板文件
Template t = cfg.getTemplate(\"test.flt\");
//开始准备生成输出
//使用模板文件的charset作为本页面的charset
//使用text/html,MIME-type
response.setContentType(\"text/html; charset=\" + t.getEncoding());
Writer out = response.getWriter();
//合并数据模型和模板,并将结果输出到out中 try
{
t.process(root, out);
}
catch(TemplateException e)
{
throw new ServletException(\"处理Template模板中出现的错误\
} } }