##Freemarker模板引擎的分享

網頁靜態化技術 -Freemarkerhtml


 緣由:在咱們開發過程當中,通常會大量的網頁靜態化部分的解決問題,例如新聞網站的那些靜態新聞,再好比咱們大型的電商項目,每一個商品的詳情頁,都是一些靜態資源,若是每次用戶訪問都要去數據庫中訪問,那麼無疑會形成高併發的現象,並且形成資源的浪費。前端

技術:網頁靜態化技術和緩存技術的共同點都是爲了減輕數據庫的訪問壓力,可是具體的應用場景不一樣,緩存比較適合小規模的數據,而網頁靜態化比較適合大規模且相對變化不太頻繁的數據。另外網頁靜態化還有利於SEOjava

  另外咱們若是將網頁以純靜態化的形式展示,就可使用Nginx這樣的高性能的web服務器來部署。Nginx能夠承載5萬的併發,而Tomcat只有幾百。web

##一,那咱們來認識下什麼時Freemarker吧?數據庫


    FreeMarker 是一個用 Java 語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarkerWeb 容器無關,即在 Web 運行時,它並不知道 Servlet HTTP。它不只能夠用做表現層的實現技術,並且還能夠用於生成 XMLJSP Java 等。json

##二,來個小的工程咱們來體驗下:緩存


 項目依賴:服務器

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

 之前的時候可能咱們還寫過信,或者如今不少人也會寫請假條之類的,會發現那個東西是否是一種模板呢?併發

親愛的**,你好!
    ************************************************************************
                                                署名:
                                                日期:

那麼咱們今天就來建立一個:高併發

<html> <head> <meta charset="utf-8"> <title>Freemarker入門小DEMO </title> </head> <body> <#--我只是一個註釋,我不會有任何輸出 --> ${name},你好。${message} </body> </html>

下面咱們來建立一個類:

package cn.liurui.core.demo; import freemarker.template.Configuration; import freemarker.template.Template; import java.io.File; import java.io.FileWriter; import java.util.Date; import java.util.HashMap; import java.util.Map; /** * @author liurui * @date $ {DATE} 12:04 */ public class Freemarker_Demo { public static void main(String[] args) throws Exception{ //準備數據模型 能夠是json數據,也能夠是javabean數據類型 Map dataMap = new HashMap();      //配置freemarker //設置configuration的配置 Configuration configuration = new Configuration(Configuration.VERSION_2_3_23); //設置模板路徑 configuration.setDirectoryForTemplateLoading(new File("D:/Users/Administrator/
      shop_pinyougou_demo_parent/freemarker_demo/src/main/resources
")); //設置模板內容編碼 configuration.setDefaultEncoding("utf-8"); //設置模板對象 Template template = configuration.getTemplate("index.ftl"); //設置模板文件 FileWriter writer = new FileWriter("D:/1.html"); //合成輸出 template.process(dataMap,writer); //關閉 writer.flush(); writer.close(); } }
    //5.建立數據模型 Map map=new HashMap(); map.put("name", "張三 "); map.put("message", "歡迎來到神奇的Freemarker世界!");

而後咱們啓動這個主方法:就會在頁面上看到咱們會輸出 張三,歡迎來到神奇的Freemarker世界!

若是這個Freemarker模板僅僅只能作到這麼簡單的,那咱們也不會用它是吧。。。。

下面咱們來看看Ftl指令:


 <#assign linkman="趙四">

聯繫人:${linkman}//聯繫人:趙四
<#assign info={"mobile":"110",'address':'黃河西路'} > 電話:${info.mobile} 地址:${info.address}//電話:110 地址:黃河西路

##一,咱們通常網頁前端寫的頁面,若是幾個頁面頭部相同,會單獨寫一個頭部,而後經過inculde命令去導入,那麼咱們模板也會有這個指令:

<#include "head.ftl">

##二,if指令

在咱們的類中咱們會添加一個:

dataMap.put("success",false);//當爲true時,爲ok,當爲false時,爲no
<#if success=true> ok <#else>  no </#if>

##三,list指令

 List goodsList=new ArrayList(); Map goods1=new HashMap(); goods1.put("name", "蘋果"); goods1.put("price", 5.8); Map goods2=new HashMap(); goods2.put("name", "香蕉"); goods2.put("price", 2.5); Map goods3=new HashMap(); goods3.put("name", "橘子"); goods3.put("price", 3.2); goodsList.add(goods1); goodsList.add(goods2); goodsList.add(goods3); map.put("goodsList", goodsList);

在咱們的模板中添加;

----商品價格表----<br> <#list goodsList as goods> ${goods_index+1} 商品名稱: ${goods.name} 價格:${goods.price}<br> </#list> 打印結果: 1 商品名稱:蘋果 價格:5.8 2 商品名稱:香蕉 價格:2.5 3 商品名稱:橘子 價格:3.2

##四,咱們須要將json字符串轉成對象:

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

##五,日期格式:

 Map dataMap = new HashMap(); dataMap.put("today",new Date()); /** * 當前日期:2019-9-30 當前時間:16:38:50 當前日期加時間;2019-9-30 16:38:50 日期格式化:2019年09月30日 16時38分50秒 */ 當前日期:${today?date}<br> 當前時間:${today?time}<br> 當前日期加時間;${today?datetime}<br> 日期格式化:${today?string("yyyy年MM月dd日 HH時mm分ss秒")}

##六,判斷變量是否存在?

<#if aaa??> aaa變量存在 <#else > aaa變量不存在 </#if>
相關文章
相關標籤/搜索