1. 程式人生 > 其它 >FreeMarker--頁面靜態化技術

FreeMarker--頁面靜態化技術

技術標籤:FreeMarker--頁面靜態化技術freemarker

FreeMarker–頁面靜態化技術

http://freemarker.foofun.cn/

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字尾結尾的檔案

資料:資料型別必須是Map物件或者Java實體類 List集合不行

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;
	}
}

初入小白,簡單講解,不喜勿噴,謝謝大家!