`
wrong1111
  • 浏览: 252940 次
  • 性别: 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  
谢谢,鼓捣一晚上,也没搞出来...终于找到一个例子了.. 汗!!

相关推荐

    freemarker学习资料汇总

    本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...

    FreeMarker学习资料

    ### FreeMarker 学习资料详解 #### 一、FreeMarker 模板文件构成 FreeMarker 是一种用于生成动态文档的工具,它通过结合固定的文本、注释、变量(插值)以及指令(FTL标签)来创建动态内容。具体而言,FreeMarker ...

    freemarker学习

    Freemarker的核心思想是将数据模型与模板结合,通过模板来呈现准备好的数据。 在开始使用Freemarker之前,你需要先下载相关的jar包。你可以访问FreeMarker的官方网站...

    freemarker学习例子

    这个“freemarker学习例子”应该包含了一些基础到进阶的Freemarker用法,帮助初学者快速上手。 在Freemarker中,主要涉及以下几个核心概念: 1. **模板(Templates)**:模板是Freemarker的核心,它是HTML或其他文本...

    freemarker学习资料

    在快速入门中,我们看到FreeMarker的基本工作原理是通过模板中的特定指令,如`${...}`,将动态数据插入到静态模板中。例如,以下模板展示了如何欢迎用户并显示最新产品的信息: ```html &lt;title&gt;Welcome! &lt;h1&gt;...

    Freemarker 学习笔记一 【乱码解决】

    这篇“Freemarker学习笔记一【乱码解决】”将指导我们如何解决这个问题。 首先,我们需要了解乱码的常见原因。在Java Web开发中,乱码通常与以下因素有关: 1. **文件编码**:Freemarker模板文件(.ftl)的编码...

    Freemarker学习笔记

    Freemarker学习笔记可以帮助初学者了解,快速掌握Freemarker

    FreeMarker 学习手册

    FreeMarker 学习手册 详细介绍FreeMarker模板技术的手册

    FreeMarker学习笔记

    ### FreeMarker 学习笔记知识点总结 #### 一、FreeMarker 概览 FreeMarker 是一个用 Java 编写的模板引擎,它可以帮助开发者快速生成 HTML 页面或其他格式的文档。其核心概念包括模板、数据模型以及如何将两者结合...

    FreeMarker学习资料整理

    下面,我们将深入探讨FreeMarker的基础知识、应用场景以及如何进行学习。 1. **基础概念** - **模板**:FreeMarker的核心是模板,它是由开发者编写的HTML或XML文件,其中嵌入了特定的FreeMarker语法,用于动态生成...

    FreeMarker学习代码小结

    在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. 模板(Template):FreeMarker的中心是模板文件,它是一种特殊的文本文件,包含固定文本和变量。变量是由...

    FreeMarker相关学习文档

    提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...

    Freemarker学习总结.pdf

    以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...

    Freemarker 学习总结

    以下是对 Freemarker 学习内容的详细总结: 一、Sequence 内置函数 1. `sequence?first`: 获取序列的第一个元素。 2. `sequence?last`: 获取序列的最后一个元素。 3. `sequence?reverse`: 反转序列中的元素顺序。 4...

Global site tag (gtag.js) - Google Analytics