六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 150|回复: 0

freeMarker基础入门

[复制链接]

升级  23.33%

19

主题

19

主题

19

主题

秀才

Rank: 2

积分
85
 楼主| 发表于 2013-2-7 21:26:22 | 显示全部楼层 |阅读模式
FreeMarker 是一款模板引擎:一种基于模板的、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包或者说是类库。 它不是面向最终用户,而是为程序员提供的可以嵌入他们开发产品的一款应用程序。
 
FreeMarker 不是 Web 应用框架。它是 Web 应用框架中的一个适用的组件,但是FreeMarker 引擎本身并不知道 HTTP 协议或 Servlet。它仅仅来生成文本。即便这样,它也非常适用于非 Web 应用环境的开发。要注意的是,我们使用 FreeMarker 作为视图层组件,是为给如 Struts 这样的 Model 2 框架提供现成的解决方案。 


 
 
【例】入门例子
FreemarkerExample
package freemarker;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;public class FreemarkerExample {/** * @param args * @throws IOException  * @throws TemplateException */public static void main(String[] args) throws IOException, TemplateException { /* 在整个应用的生命周期中,这个工作你应该只做一次。 */          /* 创建和调整配置。 */         Configuration cfg = new Configuration();         cfg.setDirectoryForTemplateLoading(new File("src/freemarker"));         cfg.setObjectWrapper(new DefaultObjectWrapper());         /* 在整个应用的生命周期中,这个工作你可以执行多次 */          /* 获取或创建模板*/         Template temp = cfg.getTemplate("test.ftl");         /* 创建数据模型 */         Map<String ,Object> root = new HashMap<String ,Object>();         root.put("user", "Big Joe");         Map<String ,Object> latest = new HashMap<String ,Object>();         root.put("latestProduct", latest);         latest.put("url", "products/greenmouse.html");         latest.put("name", "green mouse");         /* 将模板和数据模型合并 */         Writer out = new OutputStreamWriter(System.out);         //输出到文件        //Writer out = new OutputStreamWriter(new FileOutputStream("D:/temp/helloword.html"),"GBK");              temp.process(root, out);         out.flush(); }} 
test.ftl
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"><html> <head>   <title>Welcome!</title> </head> <body>   <h1>欢迎 ${user}!</h1>   <p>Our latest product:   <a href="${latestProduct.url}">${latestProduct.name}</a>! </body> </html>    
 
 
 
数据模型的创建是通过已经存在的程序计算得到的。至于模板开发者,数据模型像是树状结构(比如硬盘上的文
件夹和文件),正如本例中的数据模型,就可以如下形式来描述:
 
 
(root) 
  | 
  +- user = "Big Joe" 
  | 
  +- latestProduct 
      | 
      +- url = "products/greenmouse.html" 
      | 
      +- name = "green mouse" 
 
 
 
  比较之前你在模板中看到的${user}和${latestProduct.name}。作为一种比喻:数据模型就像计算机文件系统上的内容:根 root 和 latestProduct 对应目录(文件夹),user,url和 name 对应文件。url和 name 在 latestProduct 目录中,所以 latestProduct.name 就像是说latestProduct 目录的 name 一样。但是我所说的,这仅仅是个比喻,这里并没有真实的文件和目录。 
 
  概括地讲,模板和数据模型是 FreeMarker 所需,并用来生成输出内容的(比如之前展示的 HTML) :模板+数据模型=输出 
 
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表