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文件。
分享到:
相关推荐
本压缩包集合了丰富的Freemarker学习资源,涵盖从基础到进阶的各种知识点,以下是这些文档中可能包含的详细内容: 1. **Freemarker中文手册.pdf**: 这份手册通常会详细介绍Freemarker的基本概念,如模板语言、...
### FreeMarker 学习资料详解 #### 一、FreeMarker 模板文件构成 FreeMarker 是一种用于生成动态文档的工具,它通过结合固定的文本、注释、变量(插值)以及指令(FTL标签)来创建动态内容。具体而言,FreeMarker ...
Freemarker的核心思想是将数据模型与模板结合,通过模板来呈现准备好的数据。 在开始使用Freemarker之前,你需要先下载相关的jar包。你可以访问FreeMarker的官方网站...
这个“freemarker学习例子”应该包含了一些基础到进阶的Freemarker用法,帮助初学者快速上手。 在Freemarker中,主要涉及以下几个核心概念: 1. **模板(Templates)**:模板是Freemarker的核心,它是HTML或其他文本...
在快速入门中,我们看到FreeMarker的基本工作原理是通过模板中的特定指令,如`${...}`,将动态数据插入到静态模板中。例如,以下模板展示了如何欢迎用户并显示最新产品的信息: ```html <title>Welcome! <h1>...
这篇“Freemarker学习笔记一【乱码解决】”将指导我们如何解决这个问题。 首先,我们需要了解乱码的常见原因。在Java Web开发中,乱码通常与以下因素有关: 1. **文件编码**:Freemarker模板文件(.ftl)的编码...
Freemarker学习笔记可以帮助初学者了解,快速掌握Freemarker
FreeMarker 学习手册 详细介绍FreeMarker模板技术的手册
### FreeMarker 学习笔记知识点总结 #### 一、FreeMarker 概览 FreeMarker 是一个用 Java 编写的模板引擎,它可以帮助开发者快速生成 HTML 页面或其他格式的文档。其核心概念包括模板、数据模型以及如何将两者结合...
下面,我们将深入探讨FreeMarker的基础知识、应用场景以及如何进行学习。 1. **基础概念** - **模板**:FreeMarker的核心是模板,它是由开发者编写的HTML或XML文件,其中嵌入了特定的FreeMarker语法,用于动态生成...
在本篇文章中,我们将深入探讨FreeMarker的学习要点,包括其基本概念、语法以及实际应用。 一、基本概念 1. 模板(Template):FreeMarker的中心是模板文件,它是一种特殊的文本文件,包含固定文本和变量。变量是由...
提供的"FreeMarker相关学习文档"可能包括模板语法详解、最佳实践、示例代码等内容,可以帮助初学者快速上手。通过阅读这些资料,你可以深入了解FreeMarker的各个方面,从而更好地利用这个强大的模板引擎。 总结,...
以下是对Freemarker中Sequence、Hash以及字符串操作函数的详细说明。 一、Sequence的内置函数: 1. `sequence?first`:返回Sequence的第一个元素,如果Sequence为空,返回null。 2. `sequence?last`:返回Sequence...
以下是对 Freemarker 学习内容的详细总结: 一、Sequence 内置函数 1. `sequence?first`: 获取序列的第一个元素。 2. `sequence?last`: 获取序列的最后一个元素。 3. `sequence?reverse`: 反转序列中的元素顺序。 4...