//
初識Freemarker
//
FreeMarker介紹:
FreeMarker是一款模板引擎: 即一種基於模板和要改變的數據,並用來生成輸出文本(HTML網頁、電子郵件、配置文件、源代碼等)的通用工具。它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。
FreeMarker是免費的,基於Apache許可證2.0版本發佈。其模板編寫爲FreeMarker Template Language(FTL),屬於簡單、專用的語言。需要準備數據在真實編程語言中來顯示,比如數據庫查詢和業務運算,之後模板顯示已經準備好的數據。在模板中,主要用於如何展現數據, 而在模板之外主要用於展示什麼數據。
FreeMarker最初的設計,是被用來在MVC模式的Web開發框架中生成HTML頁面的,它沒有被綁定到 Servlet或HTML或任意Web相關的東西上。它也可以用於非Web應用環境中。(上面是團長百度的哈~)
說白了,它就是一個可以根據數據和創建好的模板,去自動生成html靜態頁面。爲什麼會有這技術的產生呢?我們知道在一些大型的電商項目或者新聞類網站,點擊一次詳情頁面,我們都會向服務器發送請求,再由服務器向數據庫取出我們想要的詳情數據,最終將數據返回到客戶端這麼一個過程!但是如果現在有很多的用戶同時點擊詳情頁面,這時候會發生一件什麼事呢?相信菜鳥們都知道,服務器會有很大的壓力,同時數據庫的的訪問壓力也會增加,這時候的用戶體驗就會變得非常不好!所以,爲了減少數據庫的壓力,同時也爲了用戶的體驗度,聰明的人想到了,如果直接把商品詳情頁面準備好,那麼就不需要再去數據庫查找了,節約了大量的資源,同時也提高了用戶體驗度。
freemarker就是起到了這麼一個作用,每增加一個商品就自動生成一個靜態頁面,保存到web層中.
優點
一、減少數據庫的壓力
二、不需要Servlet環境就可以很輕鬆的嵌入到應用程序中
三、網頁的靜態化,有利於SEO(搜索引擎優化)
四、能生成各種文本,如html,xml,java,等
FreeMarker實現原理
如圖:
FreeMarker所做的事,就是將模板與數據結合,然後輸出。
原理就是:讀取模板,將模板的“插值”用數據中的“變量”來替換,然後通過文件IO的形式輸出。
Demo
新建一個maven工程,引入freemarker依賴jar包即可。
依賴jar :
<!--freemarker依賴jar包,我的是2.3.23版本-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
項目目錄:
在模板文件demo.ftl中:
文本:直接輸出的部分
註釋:即<#-- 我是個註釋 -->,<!-- html註釋 -->
插值:即${...}部分
模板demo.ftl文件:
<html>
<header>
<title>demo</title>
<meta charset="UTF-8"/>
</header>
<body>
<#--我是個註釋-->
<!--這是html註釋-->
<#--利用這個新建的基礎模板來演示-->
${name},你好!${message}!
</body>
</html>
模板實體類FreeMarkerDemo:
導入的包:
import freemarker.template.Configuration;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.HashMap;
import java.util.Map;
新建一個main方法:
public static void main(String[] agrs) throws IOException, TemplateException {
//1.創建一個配置對象
Configuration config = new Configuration(Configuration.getVersion());
//2.設置模板所在目錄
config.setDirectoryForTemplateLoading(new File("D:\\idea\\idea_workspace_springmvc01\\freemarker-demo\\src\\main\\resources"));
//3.設置字符集
config.setDefaultEncoding("utf-8");
//4.獲取模板對象
Template template = config.getTemplate("demo.ftl");
//5.創建數據模型(可以是對象,可以是map)
Map map = new HashMap();
map.put("name", "團長");
map.put("message", "真帥!");
//6.創建一個輸出流對象
Writer out = new FileWriter("D:\\demo.html");
//7.輸出(拋出異常)
template.process(map, out);
//8.關閉
out.close();
}
運行main方法
運行成功後查看D盤目錄下是否生成了demo.html文件
瀏覽器打開demo.html:
OK,到這裏就全部完成了freemarker-demo這個項目,利用freemarker生成靜態資源,實現了網頁的靜態化,是不是很簡單~
好了,團長今天的分享到這裏,如果有什麼疑問記得在公衆號消息頁面留言哦!
如果文章中有什麼說的不到位的地方,也歡迎你指出!