網頁靜態化
網頁靜態化技術和緩衝技術的共同特點是爲了減輕數據庫的訪問壓力,但是具體應用的場景不同,緩衝技術主要應用與小規模的數據,網頁靜態化技術主要應用與大規模而且變化相對不頻繁的數據.另外網頁靜態化技術還有利於SEO.
FreeMarker
FreeMarker是Java語言編寫的模板引擎,它基於模板來生成文本輸出.FreeMarker與Web容器無關,即web在運行時,它並不知道是servlet還是http,它不僅可以用作表現層技術,而且還可以用作生成xml,jsp或Java等.
模板文件
模板文件中的四種元素:
1.文本,直接輸出的部分.
2.註釋,即<#– –>格式不會輸出.
<#-- 這只是一個註釋,不會有任何輸出 -->
3.插值,即${}部分,將使用數據模型中的部分代替輸出.
${name},你好,${message}
4.FTL指令,FreeMarker指令,與html中的標記類似,名字前加#予以區分,不會輸出
生成文件
第一步:創建一個 Configuration 對象,直接 new 一個對象。構造方法的參數就是 freemarker的版本號。
第二步:設置模板文件所在的路徑。
第三步:設置模板文件使用的字符集。一般就是 utf-8.
第四步:加載一個模板,創建一個模板對象。
第五步:創建一個模板使用的數據集,可以是 pojo 也可以是 map。一般是 Map。
第六步:創建一個 Writer 對象,一般創建一 FileWriter 對象,指定生成的文件名。
第七步:調用模板對象的 process 方法輸出文件。
第八步:關閉流
FTL指令
assign指令
(1)定義簡單類型
<#assign linkman="周先生">
聯繫人:${linkman}
(2)定義對象類型
<assign info={"mobile":"13301231212",'address':'北京市昌平區王府街'}>
電話:${info.mobile} 地址:${info.address}
include指令
創建模板文件head.ftl
<h1>英雄聯盟官網</h1>
使用include指令引入模板.
<#include "head.ftl">
if指令
在模板文件上添加
<#if success=true>
你已通過實名認證
<#else>
你未通過實名認證
</#if>
在代碼中對str變量進行賦值
map.put("success",true)l;
list指令
(1)代碼中對變量goodslist賦值
(2)在模板文件中添加
<#list goodsList as goods>
${goods_index+1}商品名稱:${goods.name} 價格:${goods.price}<br>
</#list>
內建函數
內建函數語法格式:變量+?+函數名稱
獲取集合大小
使用size函數來實現
共${goodsList?size}條記錄
轉換JSON字符串爲對象
<#assign text="{'bank':'工商銀行','account':'1010101020202020'}/>
<#assign data=text?eval />
開戶行:${data.bank} 賬號:${data.account}
日期格式化
代碼中對變量賦值:
map.put("today",new Date());
在模板中添加
當前日期:${today?date}<br>
當前時間:${today?time}<br>
當前日期加時間:${today?datetime}<br>
日期格式化:${today?string("yyyy年MM月")}
數字轉換爲字符串
代碼中對變量賦值:
map.put("point",102131);
修改模板
累計積分:${point}
累計積分:${point?c}
控制處理運算符
如果你在模板中設置了變量,但是在代碼中並沒有對變量進行賦值,那麼運行生成時會拋出異常.但是有些時候,有的變量確實是null,怎麼解決.
判斷某變量是否存在:”??”
用法爲:variable??,如果該變量存在,返回true,否則返回false
<#if aaa??>
aaa變量存在
<#else>
aaa變量不存在
</#if>
缺失變量默認值
可以使用!值做轉換處理
${aaa!'-'}
即使不對aaa賦值也不會報錯了.
運算符
算術運算符
FreeMarker表達式中完全支持算術運算,FreeMarker支持的算術運算符包括:+, - , * , / , %
邏輯運算符
邏輯運算符有如下幾個:
邏輯與:&&
邏輯或:||
邏輯非:!
邏輯運算符只能作用於布爾值,否則將產生錯誤
比較運算符
表達式中支持的比較運算符有如下幾個:
1 =或者==:判斷兩個值是否相等.
2 !=:判斷兩個值是否不等.
3 >或者gt:判斷左邊值是否大於右邊值
4 >=或者gte:判斷左邊值是否大於等於右邊值
5 <或者lt:判斷左邊值是否小於右邊值
6 <=或者lte:判斷左邊值是否小於等於右邊值