1. 程式人生 > >Freemarker生成靜態化檔案

Freemarker生成靜態化檔案

 頁面 test1.ftl

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World!</title>
</head>
<body>
Hello ${name}!
<br/>
<table>
    <tr>
        <td>序號</td>
        <td>姓名</td>
        <td>年齡</td>
        <td>錢包</td>
    </tr>
    <#list stus as stu>
        <tr>
            <td>${stu_index + 1}</td>
            <td <#if stu.name =='小明'>style="background:red;"</#if>>${stu.name}</td>
            <td>${stu.age}</td>
            <td >${stu.mondy}</td>
        </tr>
    </#list>

</table>
<br/><br/>
輸出stu1的學生資訊:<br/>
姓名:${stuMap['stu1'].name}<br/>
年齡:${stuMap['stu1'].age}<br/>
輸出stu1的學生資訊:<br/>
姓名:${stu1.name}<br/>
年齡:${stu1.age}<br/>
遍歷輸出兩個學生資訊:<br/>
<table>
    <tr>
        <td>序號</td>
        <td>姓名</td>
        <td>年齡</td>
        <td>錢包</td>
    </tr>
<#list stuMap?keys as k>
<tr>
    <td>${k_index + 1}</td>
    <td>${stuMap[k].name}</td>
    <td>${stuMap[k].age}</td>
    <td >${stuMap[k].mondy}</td>
</tr>
</#list>
</table>
</br>
<table>
    <tr>
        <td>姓名</td>
        <td>年齡</td>
        <td>出生日期</td>
        <td>錢包</td>
        <td>最好的朋友</td>
        <td>朋友個數</td>
        <td>朋友列表</td>
    </tr>
    <#if stus??>
    <#list stus as stu>
        <tr>
            <td>${stu.name!''}</td>
            <td>${stu.age}</td>
            <td>${(stu.birthday?date)!''}</td>
            <td>${stu.mondy}</td>
            <td>${(stu.bestFriend.name)!''}</td>
            <td>${(stu.friends?size)!0}</td>
            <td>
                <#if stu.friends??>
                <#list stu.friends as firend>
                    ${firend.name!''}<br/>
                </#list>
                </#if>
            </td>
        </tr>
    </#list>
    </#if>

</table>
<br/>
<#assign text="{'bank':'工商銀行','account':'10101920201920212'}" />
<#assign data=text?eval />
開戶行:${data.bank}  賬號:${data.account}

</body>
</html>

 程式碼:

package com.xuecheng.test.freemarker;

import com.xuecheng.test.freemarker.model.Student;
import freemarker.cache.StringTemplateLoader;
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import org.apache.commons.io.IOUtils;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.test.context.junit4.SpringRunner;
import org.springframework.ui.freemarker.FreeMarkerTemplateUtils;

import java.io.*;
import java.util.*;

/**
 * @author Administrator
 * @version 1.0
 * @create 2018-06-13 10:07
 **/
@SpringBootTest
@RunWith(SpringRunner.class)
public class FreemarkerTest {

    //基於模板生成靜態化檔案
    @Test
    public void testGenerateHtml() throws IOException, TemplateException {
        //建立配置類
        Configuration configuration=new Configuration(Configuration.getVersion());
        String classpath = this.getClass().getResource("/").getPath();
        //設定模板路徑
        configuration.setDirectoryForTemplateLoading(new File(classpath + "/templates/"));
        //設定字符集
        configuration.setDefaultEncoding("utf-8");
        //載入模板
        Template template = configuration.getTemplate("test1.ftl");
        //資料模型
        Map map = getMap();
        //靜態化
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
        //靜態化內容
        System.out.println(content);
        InputStream inputStream = IOUtils.toInputStream(content);
        //輸出檔案
        FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test1.html"));
        int copy = IOUtils.copy(inputStream, fileOutputStream);
    }

    //基於模板字串生成靜態化檔案
    @Test
    public void testGenerateHtmlByString() throws IOException, TemplateException {
        //建立配置類
        Configuration configuration=new Configuration(Configuration.getVersion());
        //獲取模板內容
        //模板內容,這裡測試時使用簡單的字串作為模板
        String templateString="" +
                "<html>\n" +
                "    <head></head>\n" +
                "    <body>\n" +
                "    名稱:${name}\n" +
                "    </body>\n" +
                "</html>";

        //載入模板
        //模板載入器
        StringTemplateLoader stringTemplateLoader = new StringTemplateLoader();
        stringTemplateLoader.putTemplate("template",templateString);
        configuration.setTemplateLoader(stringTemplateLoader);
        Template template = configuration.getTemplate("template","utf-8");

        //資料模型
        Map map = getMap();
        //靜態化
        String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map);
        //靜態化內容
        System.out.println(content);
        InputStream inputStream = IOUtils.toInputStream(content);
        //輸出檔案
        FileOutputStream fileOutputStream = new FileOutputStream(new File("d:/test1.html"));
        IOUtils.copy(inputStream, fileOutputStream);
    }

    //資料模型
    private Map getMap(){
        Map<String, Object> map = new HashMap<>();
        //向資料模型放資料
        map.put("name","黑馬程式設計師");
        Student stu1 = new Student();
        stu1.setName("小明");
        stu1.setAge(18);
        stu1.setMondy(1000.86f);
        stu1.setBirthday(new Date());
        Student stu2 = new Student();
        stu2.setName("小紅");
        stu2.setMondy(200.1f);
        stu2.setAge(19);
//        stu2.setBirthday(new Date());
        List<Student> friends = new ArrayList<>();
        friends.add(stu1);
        stu2.setFriends(friends);
        stu2.setBestFriend(stu1);
        List<Student> stus = new ArrayList<>();
        stus.add(stu1);
        stus.add(stu2);
        //向資料模型放資料
        map.put("stus",stus);
        //準備map資料
        HashMap<String,Student> stuMap = new HashMap<>();
        stuMap.put("stu1",stu1);
        stuMap.put("stu2",stu2);
        //向資料模型放資料
        map.put("stu1",stu1);
        //向資料模型放資料
        map.put("stuMap",stuMap);
        return map;
    }
}