網頁靜態化解決方案:Freemarker生成簡單html頁面


  FreeMarker 是一個用 Java 語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與 Web 容器無關,即在 Web 運行時,它並不知道 Servlet 或 HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成 XML,JSP 或 Java 等。可用作生成靜態html。

入門案例:

案例結構:

pom.xml引入依賴包:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.23</version>
</dependency>

案例模板test.ftl:

<html>
<head>
    <meta charset="utf-8">
    <title>FreemarkerDemo</title>
</head>
<body>
<#--我只是一個注釋,我不會有任何輸出  -->
<#--插值 可以理解為占位符-->
${name},你好。${message}
<br/>

<#--指令-----------------------------------------------------start-->
<#--assign指令 定義變量-->
<#assign linkman="劉德華" />
聯系人:${linkman}
<br/>
<#--定義對象類型變量-->
<#assign info={"mobile":"13888888888",'address':'中國香港'} />
電話:${info.mobile} 地址:${info.address}

<#--include指令 嵌入其他文件-->
<#include "head.ftl" />

<#--if指令 判斷-->
<#if success =true>
成功
<#else>
失敗
</#if>
<br/><br/>

<#--list指令 循環-->
<#list list as m>
下標+1:${m_index+1}; 值:${m.name} <br/>
</#list>
<#--指令---------------------------------------------------------end-->


<#--內建函數---------------------------------------------------start-->
<#--內建函數 size 獲取集合size-->
list中共${list?size}條記錄
<br/><br/>

<#--內建函數 eval 將字符串轉換成json對象-->
<#assign text="{'bank':'工商銀行','account':'10101920201920212'}" />
<#assign data=text?eval />
開戶行:${data.bank} 賬號:${data.account}
<br/><br/>

<#--日期格式化的內建函數-->
當前日期:${now?date} <br>
當前時間:${now?time} <br>
當前日期+時間:${now?datetime} <br>
日期格式化:  ${now?string("yyyy年MM月")}
<br/><br/>

<#--內建函數 c 將數字轉換成字符串-->
累計積分:${point?c}
<br/><br/>
<#--內建函數-----------------------------------------------------end-->

<#--空值處理---------------------------------------------------start-->
<#--判斷某變量是否存在:“??”-->
<#if aaa??>
aaa變量存在
<#else>
aaa變量不存在
</#if>
<br/><br/>

<#--使用!對null值做轉換處理-->
${aaa!'aaa為空時的默認值'}
<br/><br/>
<#--空值處理-----------------------------------------------------end-->

</body>
</html>

head.ftl:

<h1>我是head.ftl中的文本</h1>

java代碼 FreemarkerDemo:

package com.zy.demo;

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

import java.io.File;
import java.io.FileWriter;
import java.io.Writer;
import java.util.*;

public class FreemarkerDemo {
    public static void main(String[] args) throws Exception {
        //第一步:創建一個 Configuration 對象,直接 new 一個對象。構造方法的參數就是 freemarker的版本號。
        Configuration configuration = new Configuration(Configuration.getVersion());
        //第二步:設置模板文件所在的路徑。
        configuration.setDirectoryForTemplateLoading(new File("D:\\IDEAWorkSpace\\freemarker_demo\\src\\main\\resources\\"));
        //第三步:設置模板文件使用的字符集。一般就是 utf -8.
        configuration.setDefaultEncoding("utf-8");
        //第四步:加載一個模板,創建一個模板對象。
        Template template = configuration.getTemplate("test.ftl");
        //第五步:創建一個模板使用的數據集,可以是 pojo 也可以是 map。一般是 Map。
        Map map = new HashMap();
        map.put("name", "張學友");
        map.put("message", "共你有過最美的邂逅,共你有過一些風雨憂愁。");

        map.put("success", false);

        List<Map> list = new ArrayList<Map>();
        for (int i = 1; i <= 5; i++) {
            Map m = new HashMap();
            m.put("name", i);
            list.add(m);
        }
        map.put("list", list);

        map.put("now", new Date());

        map.put("point", 123456789);

        //第六步:創建一個 Writer 對象,一般創建一 FileWriter 對象,指定生成的文件名。
        Writer out = new FileWriter(new File("d:\\test.html"));
        //第七步:調用模板對象的 process 方法輸出文件。
        template.process(map, out);
        //第八步:關閉流
        out.close();
    }
}

 

運算符

1 算數運算符

  ​ FreeMarker表達式中完全支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , %

2 邏輯運算符

  ​ 邏輯運算符有如下幾個: 邏輯與:&& 邏輯或:|| 邏輯非:! 邏輯運算符只能作用於布爾值,否則將產生錯誤

3 比較運算符

​  表達式中支持的比較運算符有如下幾個: 1 =或者==:判斷兩個值是否相等. 2 !=:判斷兩個值是否不等. 3 >或者gt:判斷左邊值是否大於右邊值 4 >=或者gte:判斷左邊值是否大於等於右邊值 5 <或者lt:判斷左邊值是否小於右邊值 6 <=或者lte:判斷左邊值是否小於等於右邊值

**注意**: =和!=可以用於字符串,數值和日期來比較是否相等,但=和!=兩邊必須是相同類型的值,否則會產生錯誤,而且FreeMarker是精確比較,"x","x ","X"是不等的.其它的運行符可以作用於數字和日期,但不能作用於字符串,大部分的時候,使用gt等字母運算符代替>會有更好的效果,因為 FreeMarker會把>解釋成FTL標簽的結束字符,當然,也可以使用括號來避免這種情況,如:<#if (x>y)>

 

更多用法可參考官方在線手冊  freemarker在線手冊


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM