網上銷售平臺--Freemarker 頁面靜態化(九)

FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具,使用純Java編寫

FreeMarker被設計用來生成HTML Web頁面,特別是基於MVC模式的應用程序
雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面,通過模板顯示準備的數據(如下圖)
wKiom1ZNfmryiJiKAAAb_fr77R8479.png

模板 + 數據模型 = 輸出

FreeMarker不是一個Web應用框架,而適合作爲Web應用框架一個組件
FreeMarker與容器無關,因爲它並不知道HTTP或Servlet;FreeMarker同樣可以應用於非Web應用程序環境
FreeMarker更適合作爲Model2框架(如Struts)的視圖組件,你也可以在模板中使用JSP標記庫

FreeMarker是免費的


(1)實例代碼:

首先導包:freemarker-2.3.23.jar

//測試數據類
package com.learn.freem;
import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.learn.io.EntityMaker;

import freemarker.template.Configuration;
import freemarker.template.Template;

public class TestFreemakerEntity {
    public static void main(String[] args) {
        // 配置對象 .html
        Configuration conf = new Configuration();
        // 模板路徑
        String dir = "D:\\學習\\web\\Freemarker\\filt\\";
        try {
            // 導入模板目錄
            conf.setDirectoryForTemplateLoading(new File(dir));
            // 獲取模板
            Template template = conf.getTemplate("Templatefreemaker.html");
            
            //以下的爲測試數據
            // 數據
            Map root = new HashMap();
            root.put("hello", "數據");

            // 返回對象
            EntityMaker m = new EntityMaker(1000, "麗麗");
            root.put("per", m);

            // 遍歷List
            List<EntityMaker> list = new ArrayList<EntityMaker>();
            for (int i = 0; i < 10; i++) {
                EntityMaker maker = new EntityMaker(11 + i, "麗麗" + i);
                list.add(maker);
            }
            root.put("mm", list);

            // 遍歷Map
            Map map = new HashMap();
            map.put("id", "1000");
            map.put("name", "麗麗");
            map.put("age", "21");
            root.put("map", map);

            // 遍歷List<Map>
            Map map1 = new HashMap();
            map1.put("id", "1111");
            map1.put("name", "林林");
            Map map2 = new HashMap();
            map2.put("id", "1002");
            map2.put("name", "麗麗");
            List<Map> maplist = new ArrayList<Map>();
            maplist.add(map1);
            maplist.add(map2);
            root.put("maplist", maplist);
            
            //時間處理
            root.put("dt", new Date());

            // 輸出流(生成的靜態頁面)
            Writer out = new FileWriter(new File(dir + "creatinghello.html"));
            // 生成開始
            template.process(root, out);

            out.flush();
            out.close();
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("生成完畢");
    }
}


//測試數據實體類

package com.learn.io;
public class EntityMaker {
    private Integer pesrID;
    private String pesrName;

    public Integer getPesrID() {
        return pesrID;
    }

    public void setPesrID(Integer pesrID) {
        this.pesrID = pesrID;
    }

    public String getPesrName() {
        return pesrName;
    }

    public void setPesrName(String pesrName) {
        this.pesrName = pesrName;
    }

    public EntityMaker(Integer pesrID, String pesrName) {
        super();
        this.pesrID = pesrID;
        this.pesrName = pesrName;
    }

    public EntityMaker() {
        super();
    }

}




<!--模板-->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>模板</title>
</head>
<body>
    <h2>數據</h2>
    ${hello}
    <hr>
    
    <h2>返回對象</h2>
    編號:${per.pesrID}<br>
    姓名:${per.pesrName}
    <hr>
    
    <h2>遍歷List</h2>
    <#list mm as p>
        編號:${p.pesrID}+姓名:${p.pesrName}<br/>
    </#list>
    <hr>
    
    <h2>遍歷Map</h2>
    <#list map?keys as key>
           ${map[key]}
    </#list>
    <hr>
    
    <h2>遍歷List Map</h2>
    <#list maplist as map>
       <#list map?keys as key>
          ${map[key]}
       </#list>
     </#list>
     <hr>
     
    <h2>if else</h2>
     <#list ["麗麗","林林","林麗"] as n>
      <#if n!="林麗">
        ${n}
     <#else>
             今天林麗值班
      </#if>
    </#list>
    <hr>
    
    <h2>時間處理</h2>
            年月時間:${dt?datetime}<br/>
           時間:${dt?time}<br>
           年月:${dt?date}
        
</body>
</html>


<!-- (生成的靜態頁面) -->
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>freemaker</title>
</head>
<body>
    <h2>數據</h2>
    數據
    <hr>
    
    <h2>返回對象</h2>
    編號:1,000<br>
    姓名:麗麗
    <hr>
    
    <h2>遍歷List</h2>
        編號:11+姓名:麗麗0<br/>
        編號:12+姓名:麗麗1<br/>
        編號:13+姓名:麗麗2<br/>
        編號:14+姓名:麗麗3<br/>
        編號:15+姓名:麗麗4<br/>
        編號:16+姓名:麗麗5<br/>
        編號:17+姓名:麗麗6<br/>
        編號:18+姓名:麗麗7<br/>
        編號:19+姓名:麗麗8<br/>
        編號:20+姓名:麗麗9<br/>
    <hr>
    
    <h2>遍歷Map</h2>
           1000
           麗麗
           21
    <hr>
    
    <h2>遍歷List Map</h2>
          1111
          林林
          1002
          麗麗
     <hr>
     
    <h2>if else</h2>
        麗麗
        林林
             今天林麗值班
    <hr>
    
    <h2>時間處理</h2>
            年月時間:2015-11-20 13:18:02<br/>
           時間:13:18:02<br>
           年月:2015-11-20
        
</body>
</html>

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章