FreeMarker--頁面靜態化技術
阿新 • • 發佈:2020-12-24
技術標籤:FreeMarker--頁面靜態化技術freemarker
FreeMarker–頁面靜態化技術
FreeMarker 是一款 模板引擎: 即一種基於模板和要改變的資料, 並用來生成輸出文字(HTML網頁,電子郵件,配置檔案,原始碼等)的通用工具。 它不是面向終端使用者的,而是一個Java類庫,是一款程式設計師可以嵌入他們所開發產品的元件。
FreeMarker 全稱 FreeMarker Template Language (FTL / ftl)
FreeMarker主要由 Template file (模板檔案) 和 Java object (Java資料)共同生成
Template file (模板檔案)
<html>
.........
hello ${name}
.........
</html>
Java object (Java資料)
.........
data.name = "小明";
.........
Template file (模板檔案)+ Java object (Java資料)
===>生成一個靜態化頁面
Output
<html>
.........
hello 小明;
.........
</html>
注意事項:
模板:必須是.ftl字尾結尾的檔案
FreeMarker中一些常用的標籤使用案例
if標籤
官方參考
http://freemarker.foofun.cn/ref_directive_if.html
<#if age lt 16> // lt=>小於
未成年!
<#else>
成年了!
</#if>
list標籤
官方參考
http://freemarker.foofun.cn/ref_directive_list.html
<#list users as user> // users是源資料,user是物件 ${user.name}===${user.age} </#list>
頁面靜態化技術的程式設計步驟
1**.匯入核心Freemarker.jar包**
**2.獲取模板物件**
獲取Configuration物件 //為了獲取模板物件
Configuration config = new Configuration(Configuration.VERSION_2_3_28); //引數是版本號
設定預設的載入路徑
File file = new File(路徑);
config.setDirectoryForTemplateLoading(file);
設定編碼集
config.setDefaultEncoding("utf-8");
獲取模板
Template template = config.getYemplate(模板名);
**3.準備資料**
時間戳(生成的模板的名字)
Long time = System.cuttentTimeMillis();
設定檔案的儲存名
String url = time + suffix; //生成的檔名 + 字尾
**4.生成靜態資源**
FileWriter Out = new FileWriter(new File(file,url));
生成靜態化頁面
template.process(obj,out); //obj = Java資料:Map/實體類
**5.關流**
out.cloes();
**6.返回生成的檔案全名用於儲存**
return url;
下面是封裝的一個FreeMarker的一個工具類 需要的小夥伴自取
方法一共需要4個引數
1.String templatePath ==>預設載入路徑
2.String templateName ==>模板名
3.Object data ==>Java資料:Map集合或者Java實體類
4.String suffix ==>生成的靜態化檔案的字尾
如:
//路徑
String Path = req.getServletContext().getRealPath("/static/template");
//模板
String url = FreeMarkerUtil.createFile(Path, "story.ftl", story, ".html");
下面是工具類的程式碼
package cn.itsource.util;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import cn.itsource.domain.ArticleType;
import freemarker.template.Configuration;
import freemarker.template.Template;
public class FreeMarkerUtil {
public static String createFile(String templatePath,String templateName,Object data,String suffix){
FileWriter out = null;
try {
// 重要:模板(.ftl)和資料(Map物件或Java實體 ,但是List集合不行)
// 1.匯入freemarker.jar
// 2.獲取模板(Template)物件
// 獲取Configuration物件 -- 為了獲取模板物件
Configuration config = new Configuration(Configuration.VERSION_2_3_28);
// 設定預設載入路徑
File file = new File(templatePath);
config.setDirectoryForTemplateLoading(file);
// 設定預設編碼
config.setDefaultEncoding("utf-8");
// 獲取模板
Template template = config.getTemplate(templateName);
// 3.準備資料
// map
// java實體物件
// 時間戳
long time = System.currentTimeMillis();
String url = time+suffix;
// 4.template.process()生成靜態資源
out = new FileWriter(new File(file, url));
template.process(data, out);
return url;
// 5.建立xxx.ftl模板
// 模板中使用el表示式獲取資料
// 6.測試執行
} catch (Exception e) {
e.printStackTrace();
}finally{
if (out!=null) {
try {
out.close();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
return null;
}
}