`
wrong1111
  • 浏览: 249277 次
  • 性别: Icon_minigender_1
  • 来自: 湖南
社区版块
存档分类
最新评论

freemarker 学习

阅读更多

FreeMarker 练习

1.建立java工程

2.建立JAVA包,存放模版文件.ftl文件夹templates ,及存放生成.shtml文件夹shtmls

3.在templates文件夹下建一个1.ftl文件。内容如下。

 <html>
<head>

<title>${person.description} </title>
</head>

<body>
<table width="100%" border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF">
<tr><td>
  hello!${person.name}</br>
  now date is:${person.nowTime?string('yyyy-MM-dd hh:mm:ss')}</br>
  your age is:${person.age}</br>
  用户定义指令:</br>
  <#macro greet person>
    <font size="2">Hello! ${person}!</font>
  </#macro>
 
  <@greet person="wyong"></@greet>
    </td>

</tr>
</table>
</body>

</html>
 



4.建立需要输入的VO对象。Person 类
内容如下 :

package com.example.demo;

import java.util.Date;

public class Person {
    private String name;

    private Date nowTime;

    private String age;

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getNowTime() {
        return nowTime;
    }

    public void setNowTime(Date nowTime) {
        this.nowTime = nowTime;
    }

}
 



5。导入所用模版引擎的freemarker2.3.13的jar包。

6.建立处理模版类 Demo

 内容如下:

package com.example.demo;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
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.Template;
import freemarker.template.TemplateException;

public class Demo {
    private Configuration freemarker_cfg = null;

    /**
     * 获取freemarker的配置. freemarker本身支持classpath,目录和从ServletContext获取.
     *
     * @throws IOException
     */
    protected Configuration getFreeMarkerCFG() throws IOException {
        if (null == freemarker_cfg) {
            // Initialize the FreeMarker configuration;
            // - Create a configuration instance
            freemarker_cfg = new Configuration();

            // - FreeMarker支持多种模板装载方式,可以查看API文档,都很简单:路径,根据Servlet上下文,classpath等等

            // htmlskin是放在classpath下的一个目录
            // freemarker_cfg.setClassForTemplateLoading(this.getClass(),
            // "/htmlskin");
            // 调用文件系统中的路径 模版文件.ftl 的根目录.
            freemarker_cfg.setDirectoryForTemplateLoading(new File(
                    "E://space5.5//FreeMarkerDemo//templates"));
        }

        return freemarker_cfg;
    }

    /**
     * 生成静态文件.
     *
     * @param templateFileName
     *            模板文件名,相对templates路径,例如"/templates/1.ftl"
     * @param propMap
     *            用于处理模板的属性Object映射
     * @param htmlFilePath
     *            要生成的静态文件的路径,相对设置中的根路径,例如 "/shtmls/1/2005/4/"
     * @param htmlFileName
     *            要生成的文件名,例如 "1.htm"
     */
    public boolean geneHtmlFile(String templateFileName, Map propMap,
            String htmlFilePath, String htmlFileName) {
        // @todo 从配置中取得要静态文件存放的根路径:需要改为自己的属性类调用
        String sRootDir = "E:/space5.5/FreeMarkerDemo/shtmls";

        try {
            String prefix = templateFileName.substring(0, templateFileName
                    .indexOf("."));
            Template t = getFreeMarkerCFG().getTemplate(templateFileName);
            java.text.SimpleDateFormat sdf = new java.text.SimpleDateFormat(
                    "yyyyMMddHHmmss");
            htmlFileName = prefix + "_" + sdf.format(new java.util.Date())
                    + "_" + Math.round(Math.random() * 100) + htmlFileName;

            // 如果根路径存在,则递归创建子目录
            creatDirs(sRootDir, htmlFilePath);

            File afile = new File(sRootDir + "/" + htmlFilePath + "/"
                    + htmlFileName);

            Writer out = new BufferedWriter(new OutputStreamWriter(
                    new FileOutputStream(afile)));

            t.process(propMap, out);
        } catch (TemplateException e) {
            System.out.println("Error while processing FreeMarker template "
                    + templateFileName + " \n" + e);
            return false;
        } catch (IOException e) {
            System.out.println("Error while generate Static Html File "
                    + htmlFileName + "\n " + e);
            return false;
        }

        return true;
    }

    /**
     * 创建多级目录
     *
     * @param aParentDir
     *            String
     * @param aSubDir
     *            以 / 开头
     * @return boolean 是否成功
     */
    public static boolean creatDirs(String aParentDir, String aSubDir) {
        File aFile = new File(aParentDir);
        if (aFile.exists()) {
            File aSubFile = new File(aParentDir + aSubDir);
            if (!aSubFile.exists()) {
                return aSubFile.mkdirs();
            } else {
                return true;
            }
        } else {
            return false;
        }
    }

    /**
     * 2008-5-19 author :wangyong
     *
     * @param args
     *
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        Person person = new Person();
        person.setAge("22");
        person.setName("Jacke");
        person.setNowTime(new java.util.Date());
        person.setDescription("这是第一次使用freemarker测试!");
       
        Demo test = new Demo();

        Map root = new HashMap();
        root.put("person", person);//把此时的vo对象person放到map中,传值

        String sGeneFilePath = "/example/";

        String sFileName = ".htm";//生成的文件后缀名

        boolean bOK = test.geneHtmlFile("1.ftl", root, sGeneFilePath,
                sFileName);
    }

}
 



运行此程序,可以在工程目录的shtmls/example/下看到生成的一个根据日期时间生成的.htm文件。

分享到:
评论
4 楼 xiaoLee 2011-10-13  
不错的example
3 楼 fpplzw 2008-11-26  
发现个好东西
2 楼 wrong1111 2008-11-23  
希望对你有所帮助。。。

1 楼 tkl211 2008-11-10  
谢谢,鼓捣一晚上,也没搞出来...终于找到一个例子了.. 汗!!

相关推荐

Global site tag (gtag.js) - Google Analytics