Freemarker由浅入深01-环境搭建、测试

  1. Freemarker是什么?
    FreeMarker 是一款模板引擎:即一种基于模板、用来生成输出文本(任何来自于 HTML格式的文本用来自动生成源代码)的通用工具。它是为 Java 程序员提供的一个开发包,或者说是一个类库。
    FreeMarker 不是 Web 开发的应用程序框架。它是一个适用于 Web 应用程序框架中的组件,但是 FreeMarker 引擎本身并不知道 HTTP 协议或 Java  Servlet 的存在。它仅仅来生成文本内容。
  2. Freemarker能做什么?
    使用 FreeMarker 作为视图层的组件,是为了给诸如 Struts 这样的 Model 2 应用框架提供现成的解决方案。比如代替Jsp,生成静态的Html等等;
  3. 如何获取Freemarker资源包以及说明书?
    Freemarker 目前最新2.3.20Jar包下载地址:http://jaist.dl.sourceforge.net/project/freemarker/freemarker/2.3.20/freemarker-2.3.20.tar.gz
    Freemarker 中文说明书下载地址: http://nchc.dl.sourceforge.net/project/freemarker/chinese-manual/FreeMarker_Manual_zh_CN.pdf
  4. 搭建简易Demo
    (1)这里我使用maven来构建,pom.xml如下;如果使用传统的Eclipse Project,请将下载到的jar包加到lib下去;
    [html]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    2.   xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">  
    3.   <modelVersion>4.0.0</modelVersion>  
    4.   
    5.   <groupId>org.wxp.freemarker</groupId>  
    6.   <artifactId>freemarker01</artifactId>  
    7.   <version>0.0.1-SNAPSHOT</version>  
    8.   <packaging>jar</packaging>  
    9.   
    10.   <name>freemarker01</name>  
    11.   <url>http://maven.apache.org</url>  
    12.   
    13.   <properties>  
    14.     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>  
    15.   </properties>  
    16.   
    17.   <dependencies>  
    18.     <dependency>  
    19.       <groupId>junit</groupId>  
    20.       <artifactId>junit</artifactId>  
    21.       <version>4.10</version>  
    22.       <scope>test</scope>  
    23.     </dependency>  
    24.       
    25.     <!-- Freemarker -->  
    26.     <dependency>  
    27.         <groupId>org.freemarker</groupId>  
    28.         <artifactId>freemarker</artifactId>  
    29.         <version>2.3.20</version>  
    30.     </dependency>  
    31.               
    32.   </dependencies>  
    33. </project>  

    (2)接下来,我们来创建Freemarker根据数据和模型生成Html页面的工具类
    [java]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. package org.wxp.freemarker;  
    2.   
    3. import java.io.File;  
    4. import java.io.FileWriter;  
    5. import java.io.IOException;  
    6. import java.io.PrintWriter;  
    7. import java.util.Map;  
    8.   
    9. import freemarker.template.Configuration;  
    10. import freemarker.template.Template;  
    11. import freemarker.template.TemplateException;  
    12.   
    13. public class FreemarkerUtil {  
    14.   
    15.     public Template getTemplate(String name) {  
    16.         Template temp = null;  
    17.         try {  
    18.             // 通过Freemarker的Configuration读取相应的Ftl  
    19.             Configuration cfg = new Configuration();  
    20.             // 设定去哪里读取相应的ftl模板  
    21.             cfg.setClassForTemplateLoading(this.getClass(), "/ftl");  
    22.             // 在模板文件目录中寻找名称为name的模板文件  
    23.             temp = cfg.getTemplate(name);  
    24.         } catch (IOException e) {  
    25.             e.printStackTrace();  
    26.         }  
    27.         return temp;  
    28.     }  
    29.   
    30.     /** 
    31.      * 控制台输出文件内容 
    32.      * @param name 
    33.      * @param rootMap 
    34.      */  
    35.     public void print(String name, Map<String, Object> rootMap) {  
    36.         try {  
    37.             // 通过Template类可以将模板文件输出到相应的文件  
    38.             Template temp = this.getTemplate(name);  
    39.             temp.process(rootMap, new PrintWriter(System.out));  
    40.         } catch (TemplateException e) {  
    41.             e.printStackTrace();  
    42.         } catch (IOException e) {  
    43.             e.printStackTrace();  
    44.         }  
    45.     }  
    46.   
    47.     /** 
    48.      * 将替换后的模板内容输出到文件 
    49.      * @param name 
    50.      * @param rootMap 
    51.      * @param outFile 
    52.      */  
    53.     public void fprint(String name, Map<String, Object> rootMap, String outFile) {  
    54.         FileWriter out = null;  
    55.         try {  
    56.             out = new FileWriter(new File("D:\\freemarker\\ftl\\html\\"  
    57.                     + outFile));  
    58.             Template template = this.getTemplate(name);  
    59.             template.process(rootMap, out);  
    60.         } catch (TemplateException e) {  
    61.             e.printStackTrace();  
    62.         } catch (IOException e) {  
    63.             e.printStackTrace();  
    64.         } finally {  
    65.             if (null != out)  
    66.                 try {  
    67.                     out.close();  
    68.                 } catch (IOException e) {  
    69.                     e.printStackTrace();  
    70.                 }  
    71.         }  
    72.     }  
    73. }  

    (3)然后,来创建Freemarker的模板文件,名为01.ftl;(其实可以看到,也就是在ftl文件中写html,除过Freemarker自己的标签)
    [html]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    2. <html>  
    3. <head>  
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    5. <title>Insert title here</title>  
    6. </head>  
    7. <body>  
    8.     你好,${username}  
    9. </body>  
    10. </html>  

    (4)最后,来写一个测试类;
    [java]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. package org.wxp.freemarker;  
    2.   
    3. import java.util.ArrayList;  
    4. import java.util.Arrays;  
    5. import java.util.Date;  
    6. import java.util.HashMap;  
    7. import java.util.List;  
    8. import java.util.Map;  
    9.   
    10. import org.junit.Before;  
    11. import org.junit.Test;  
    12. import org.wxp.freemarker.model.User;  
    13.   
    14. public class TestFreemarker {  
    15.     private FreemarkerUtil freemarkerUtil;  
    16.     private Map<String, Object> rootMap = null;  
    17.     @Before  
    18.     public void setUp() {  
    19.         freemarkerUtil = new FreemarkerUtil();  
    20.         rootMap = new HashMap<String, Object>();  
    21.     }  
    22.       
    23.     @Test  
    24.     public void test01() {  
    25.         // 填充数据  
    26.         rootMap.put("username""王三毛");  
    27.         // 打印到控制台  
    28.         freemarkerUtil.print("01.ftl", rootMap);  
    29.         // 输出到文件  
    30.         freemarkerUtil.fprint("01.ftl", rootMap, "01.html");  
    31.     }  
    32. }  

    (5)来看看生成的Html文件;
    [html]  view plain copy 在CODE上查看代码片 派生到我的代码片
    1. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">  
    2. <html>  
    3. <head>  
    4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">  
    5. <title>Insert title here</title>  
    6. </head>  
    7. <body>  
    8.     你好,王三毛  
    9. </body>  
    10. </html>  
    浏览器展示效果如下:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
FreeMarker 和 Poi-tl 都是基于模板的生成方式,需要先创建一个 Word 文档模板,然后将数据填充到模板中,最终生成一个完整的 Word 文档。它们之间的主要区别在于生成方式和操作方法。 1. 生成方式 FreeMarker 的生成方式是基于模板的,需要程序员先创建一个 Word 文档模板,然后使用 FreeMarker 引擎将数据模型中的数据填充到模板中,并生成一个完整的 Word 文档。 Poi-tl 也是基于模板的生成方式,但它提供了更加方便的模板编辑方式。Poi-tl 可以使用 Microsoft Office 软件创建模板,也可以使用 Poi-tl 提供的 API 直接创建模板。 2. 操作方法 FreeMarker 和 Poi-tl 都是使用 API 对文档进行操作,例如修改样式、替换变量、插入图片等等。但是它们的操作方法略有不同。 FreeMarker 使用类似于 JSP 的语法,即通过 ${} 表示一个变量,将数据模型中的数据填充到相应的变量位置上。同时,FreeMarker 还提供了一些内置的指令,如 if、list 等,可以用于逻辑控制和循环操作。 Poi-tl 则使用类似于 Word 的书签的方式,它将模板中的变量替换成书签,然后使用 Poi-tl 提供的 API 将数据填充到书签位置上。同时,Poi-tl 还提供了一些针对 Word 模板的 API,例如修改样式、替换变量、插入图片等等。 3. 使用场景 由于 FreeMarker 和 Poi-tl 是基于模板的生成方式,因此适用于需要批量生成相似结构的 Word 文档的场景,例如生成合同、报告、简历等。 4. 功能 FreeMarker 和 Poi-tl 都提供了丰富的 API,可以对 Word 文档进行各种操作,例如修改样式、替换变量、插入图片等等。但是它们的功能略有不同。 FreeMarker 主要是通过填充模板来生成 Word 文档,并提供了一些基本的操作 API,例如对模板中的变量进行替换、对模板中的样式进行修改、插入图片等等。 Poi-tl 则提供了更加方便的模板编辑方式,可以使用 Microsoft Office 软件创建模板,也可以使用 Poi-tl 提供的 API 直接创建模板。同时,Poi-tl 还提供了针对 Word 模板操作的 API,例如修改样式、替换变量、插入图片等等。 综上所述,FreeMarker 和 Poi-tl 都是用于生成 Word 文档的工具,它们之间有着不同的生成方式、操作方法、使用场景和功能。选择哪个工具应根据具体的需求和场景进行判断。如果需要批量生成相似结构的 Word 文档,可以选择 FreeMarker 或 Poi-tl;如果需要更加方便的模板编辑方式和针对 Word 模板的操作 API,可以选择 Poi-tl。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值