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下去;
    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
    
      <groupId>org.wxp.freemarker</groupId>
      <artifactId>freemarker01</artifactId>
      <version>0.0.1-SNAPSHOT</version>
      <packaging>jar</packaging>
    
      <name>freemarker01</name>
      <url>http://maven.apache.org</url>
    
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
    
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>4.10</version>
          <scope>test</scope>
        </dependency>
        
        <!-- Freemarker -->
        <dependency>
    		<groupId>org.freemarker</groupId>
    		<artifactId>freemarker</artifactId>
    		<version>2.3.20</version>
    	</dependency>
                
      </dependencies>
    </project>
    

    (2)接下来,我们来创建Freemarker根据数据和模型生成Html页面的工具类
    package org.wxp.freemarker;
    
    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.io.PrintWriter;
    import java.util.Map;
    
    import freemarker.template.Configuration;
    import freemarker.template.Template;
    import freemarker.template.TemplateException;
    
    public class FreemarkerUtil {
    
    	public Template getTemplate(String name) {
    		Template temp = null;
    		try {
    			// 通过Freemarker的Configuration读取相应的Ftl
    			Configuration cfg = new Configuration();
    			// 设定去哪里读取相应的ftl模板
    			cfg.setClassForTemplateLoading(this.getClass(), "/ftl");
    			// 在模板文件目录中寻找名称为name的模板文件
    			temp = cfg.getTemplate(name);
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    		return temp;
    	}
    
    	/**
    	 * 控制台输出文件内容
    	 * @param name
    	 * @param rootMap
    	 */
    	public void print(String name, Map<String, Object> rootMap) {
    		try {
    			// 通过Template类可以将模板文件输出到相应的文件
    			Template temp = this.getTemplate(name);
    			temp.process(rootMap, new PrintWriter(System.out));
    		} catch (TemplateException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	/**
    	 * 将替换后的模板内容输出到文件
    	 * @param name
    	 * @param rootMap
    	 * @param outFile
    	 */
    	public void fprint(String name, Map<String, Object> rootMap, String outFile) {
    		FileWriter out = null;
    		try {
    			out = new FileWriter(new File("D:\\freemarker\\ftl\\html\\"
    					+ outFile));
    			Template template = this.getTemplate(name);
    			template.process(rootMap, out);
    		} catch (TemplateException e) {
    			e.printStackTrace();
    		} catch (IOException e) {
    			e.printStackTrace();
    		} finally {
    			if (null != out)
    				try {
    					out.close();
    				} catch (IOException e) {
    					e.printStackTrace();
    				}
    		}
    	}
    }
    

    (3)然后,来创建Freemarker的模板文件,名为01.ftl;(其实可以看到,也就是在ftl文件中写html,除过Freemarker自己的标签)
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	你好,${username}
    </body>
    </html>

    (4)最后,来写一个测试类;
    package org.wxp.freemarker;
    
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Date;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import org.junit.Before;
    import org.junit.Test;
    import org.wxp.freemarker.model.User;
    
    public class TestFreemarker {
    	private FreemarkerUtil freemarkerUtil;
    	private Map<String, Object> rootMap = null;
    	@Before
    	public void setUp() {
    		freemarkerUtil = new FreemarkerUtil();
    		rootMap = new HashMap<String, Object>();
    	}
    	
    	@Test
    	public void test01() {
    		// 填充数据
    		rootMap.put("username", "王三毛");
    		// 打印到控制台
    		freemarkerUtil.print("01.ftl", rootMap);
    		// 输出到文件
    		freemarkerUtil.fprint("01.ftl", rootMap, "01.html");
    	}
    }
    

    (5)来看看生成的Html文件;
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
    	你好,王三毛
    </body>
    </html>
    浏览器展示效果如下:


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值