转载地址:
http://www.shuonar.com/nar_referenceone.html?id=10说哪儿网
在跟着说客学习freemarker(一)中,我们仅仅将数据输出到控制台,那么,我们如何将文件输出到html中,这是我们这章节所讨论的,下面开始学习的旅行。有的同学要求本社区把第章节中完整的类代码贴出来,那么本社区就分享一下吧,在第一章节完整的类如下:
package org.shen.freemark;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TestFreemark {
private Template getTemplate(String name){
//通过Freemaker的Configuration读取相应的ftl
Configuration cfg = new Configuration();
Template tmp;
try {
//设定去哪里读取相应的ftl模板文件
cfg.setClassForTemplateLoading(this.getClass(), "/ftl");
//在模板文件目录中找到名称为name的文件
tmp = cfg.getTemplate(name);
return tmp;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
private void print(String name, Map<String, Object> root){
Template tmp = this.getTemplate(name);
try {
//通过Template可以将模板文件输出到相应的流
tmp.process(root, new PrintWriter(System.out));
} catch (TemplateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Map<String, Object> root = new HashMap<String, Object>();
root.put("username", "shuonar");
TestFreemark tf = new TestFreemark();
tf.print("01.ftl", root);
}
}
以上就是第一章节的完整类,那么开始学习freemarker将文件读取到html中。
在上面代码中,这段代码:tmp.process(root, new PrintWriter(System.out));是把我们需要的流输出到控制,我们需要输出到控制台就让他输出到控制台,输出到控制台是System.out。那么我们传一个文件输出流输出到文件,那么我们再加一个方法,在E盘下加一个文件夹ftl(E:\ftl),然后下面是代码:
public void fprint(String name, Map<String, Object> root, String outFile){
FileWriter out = null;
//通过一个文件输出流,就可以写到相应的文件中
try {
out = new FileWriter(new File("E:\\ftl\\" + outFile));
Template tmp = this.getTemplate(name);
tmp.process(root, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
上面代码注意一点,需要将输出流关闭。下面就是我们的测试代码:
public static void main(String[] args) {
Map<String, Object> root = new HashMap<String, Object>();
root.put("username", "shuonar");
TestFreemark tf = new TestFreemark();
tf.print("01.ftl", root);
//输出到html中
tf.fprint("01.ftl", root, "o1.html");
}
然后点击运行,在E盘下面的ftl文件夹中存在01.html,点击运行,在html中我们看到输出的内容,不过这里是乱码,因为我们还没有设置编码方式,如何设置呢?
我们在木板目录下,即项目的ftl文件夹下建立一个html文件,名字是02.html,然后去掉<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">文档声明头,然后把html的后缀名字更改为html确定原先的html的编码方式是UTF-8,然后书写木板,代码如下:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>说哪儿网(www.shuonar.com)</title>
</head>
<body>
<h1>你好,${username}!</h1>
</body>
</html>
然后修改测试代码:
public static void main(String[] args) {
Map<String, Object> root = new HashMap<String, Object>();
root.put("username", "shuonar");
TestFreemark tf = new TestFreemark();
tf.print("01.ftl", root);
//输出到html中
tf.fprint("02.ftl", root, "01.html");
}
然后运行点击01.html,乱码得以解决。
为了应广大热爱说哪儿网的网友要求,社区建立了一个freemarker交流群,希望大家加入交流freemarker技术。交流QQ 群是 :150712883,欢迎大家加入。
下面是第二章节的类的整体代码:
package org.shen.freemark;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
public class TestFreemark {
private Template getTemplate(String name){
//通过Freemaker的Configuration读取相应的ftl
Configuration cfg = new Configuration();
Template tmp;
try {
//设定去哪里读取相应的ftl模板文件
cfg.setClassForTemplateLoading(this.getClass(), "/ftl");
//在模板文件目录中找到名称为name的文件
tmp = cfg.getTemplate(name);
return tmp;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
public void fprint(String name, Map<String, Object> root, String outFile){
FileWriter out = null;
//通过一个文件输出流,就可以写到相应的文件中
try {
out = new FileWriter(new File("E:\\ftl\\" + outFile));
Template tmp = this.getTemplate(name);
tmp.process(root, out);
} catch (IOException e) {
e.printStackTrace();
} catch (TemplateException e) {
e.printStackTrace();
}finally{
if(out != null){
try {
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public static void main(String[] args) {
Map<String, Object> root = new HashMap<String, Object>();
root.put("username", "shuonar");
TestFreemark tf = new TestFreemark();
//输出到html中
tf.fprint("02.ftl", root, "01.html");
}
}
分享到:
相关推荐
通过这个过程,开发者能够利用FreeMarker将动态数据高效地转化为静态HTML页面,简化Web开发流程,使得非程序员也能参与到内容的生成中来。在实际项目中,FreeMarker经常与Spring MVC等框架结合使用,实现更复杂的...
Freemarker是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的文本文件。它采用声明式编程方式,使得开发者可以专注于数据模型,而不用关心如何呈现这些数据。本示例项目是在Eclipse环境中创建的一个...
在Freemarker中,乱码可能发生在多个环节:模板文件的读取、数据模型的处理以及最终HTML页面的渲染。具体来说: 1. **模板文件的编码**:如果模板文件的编码与Freemarker期望的编码不一致,就可能出现乱码。 2. **...
在这个“FreeMarker动静分离生成html文件”的示例中,我们将探讨如何利用FreeMarker实现这一功能,并在Eclipse环境下进行运行。 首先,我们需要了解FreeMarker的基本语法。FreeMarker模板文件(通常以`.ftl`为扩展...
本篇文章将深入探讨如何在Java中使用FreeMarker生成带有盖章的PDF合同文件。 首先,让我们了解FreeMarker的基本概念。FreeMarker是一个基于模板的语言,它与Java代码分离,允许开发者用简单的模板语法来表示数据。...
接下来,创建一个数据模型,该模型将包含从HTML中提取或生成的数据。这些数据将在FreeMarker模板中使用,以填充文档的各个部分。例如,你可以有一个包含标题、段落、列表等元素的数据对象。 在代码中,使用...
首先,你需要创建一个Freemarker模板文件,定义好表格的结构和样式,然后将Java对象的数据填充到模板中。 - 创建`ftl`文件,例如`excel.ftl`,设置表格行、列的布局,用`<#foreach>`循环遍历数据集合,将数据插入到...
在IT领域,Freemarker是一种强大的模板引擎,用于将数据模型与HTML、XML或任何文本格式相结合,生成最终的文档。本文将详细解析一个具体的使用案例:如何利用Freemarker根据模板生成文件,特别是Java环境下生成...
在本项目"springboot整合freemarker生成静态html的demo.zip"中,我们将探讨如何将SpringBoot框架与FreeMarker模板引擎结合,以实现动态数据驱动的静态HTML页面生成。FreeMarker是一个强大的、开源的模板语言,它允许...
压缩包中的Word文件可能展示了如何将FreeMarker模板应用于生成Word文档。FreeMarker可以与其他库(如Apache POI)结合,生成复杂格式的Word文档,这对于报告生成、合同起草等场景非常有用。 3. **FTL文件示例** ...
reeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:格式部分,不会输出 3,插值:即${...}或#{...}格式的部分,将使用数据模型中的部分替代输出 4...
`Freemarker`是一个强大的模板引擎,通常用于动态生成HTML、XML等文本格式,而将`Freemarker`与HTML模板结合生成PDF,可以充分利用HTML的易编辑性和富文本特性,为用户提供高质量的文档输出。下面我们将深入探讨如何...
3. 通用数据模型:FreeMarker不直接反射到Java对象,而是通过插件式对象封装,以变量方式在模板中显示。 4. 为Web准备:内建处理典型Web相关任务,能够集成到Model2 Web应用框架中作为JSP的替代,支持JSP标记库。 5....
FreeMarker 是一个强大的模板引擎,常用于Web应用中动态生成HTML或其他类型的文本。在Java开发中,它也可以用来生成Word文档,提供了一种简洁的方式来构建结构化的文档内容。以下是关于如何使用FreeMarker生成Word...
5. **生成静态文件**:一旦HTML源码生成,你可以将其写入到磁盘上的一个文件中,从而创建静态页面。确保选择合适的路径,并正确处理文件的创建和覆盖。 6. **优化和调试**:在实际应用中,你可能需要对模板进行优化...
3. **处理模板**:使用Freemarker API的`Configuration`和`Template`类,将数据模型应用到模板上,生成HTML字符串。 4. **调用wkhtmltox**:通过Java绑定库,将生成的HTML字符串转换为PDF。 5. **保存PDF**:将生成...
FreeMarker是一款强大的、开源的模板引擎,主要用于生成动态HTML、XML或其他格式的文本输出,尤其在Web应用开发中被广泛使用。2.3.23是FreeMarker的一个稳定版本,这个版本的官方中文文档提供了全面的指导和说明,...
Freemarker是一个强大的、轻量级的模板引擎,它可以将模板和数据模型结合起来,生成输出文本,如HTML、XML或者如本例中的PDF。 首先,我们需要了解Freemarker的基本用法。Freemarker模板语言(FTL)是一种简单的、...
4、资源概要:先阅读README.md文档,然后根据文档中的资源示例运行代码,有postman和内部调用两种方式; 5、项目目录other/下面有示例文件可快速入手; 适合人群:需要通过法务提供的word类型的合同模板,填充数据生成...