日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

使用Freemarker生成靜態(tài)頁面

作者:學不會Java的陳同學 更新時間: 2022-08-28 編程語言

FreeMarker入門

1. 頁面靜態(tài)化介紹

頁面靜態(tài)化其實就是將原來的動態(tài)網頁(例如通過ajax請求動態(tài)獲取數(shù)據(jù)庫中的數(shù)據(jù)并展示的網頁)改為通過靜態(tài)化技術生成的靜態(tài)網頁,這樣用戶在訪問網頁時,服務器直接給用戶響應靜態(tài)html頁面,沒有了動態(tài)查詢數(shù)據(jù)庫的過程。

那么這些靜態(tài)HTML頁面還需要我們自己去編寫嗎?其實并不需要,我們可以通過專門的頁面靜態(tài)化技術幫我們生成所需的靜態(tài)HTML頁面,例如:Freemarker、thymeleaf等。

2. Freemarker介紹

FreeMarker 是一個用 Java 語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與 Web 容器無關,即在 Web 運行時,它并不知道 Servlet 或 HTTP。它不僅可以用作表現(xiàn)層的實現(xiàn)技術,而且還可以用于生成 XML,JSP 或 Java 等。
官方提供

3. Freemarker入門案例

3.1 環(huán)境搭建

創(chuàng)建maven工程并導入對應的坐標

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

3.2 創(chuàng)建模板文件

模板文件中包含四種元素:
1. 文本,直接輸出的部分
2. 注釋,即<#–…–>格式不會輸出
3. 插值(Interpolation):即${…}部分,將使用數(shù)據(jù)模型中的部分替代輸出
4. FTL指令:FreeMarker指令,和HTML標記類似,名字前加#予以區(qū)分,不會輸出
下面一一介紹這四種元素。
Freemarker的模板文件后綴可以任意,一般建議為ftl。
在D盤創(chuàng)建ftl目錄,在ftl目錄中創(chuàng)建名稱為test.ftl的模板文件,內容如下:

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

3.3 生成文件

使用步驟:

第一步:創(chuàng)建一個 Configuration 對象,直接 new 一個對象。構造方法的參數(shù)就是 freemarker的版本號。

第二步:設置模板文件所在的路徑。

第三步:設置模板文件使用的字符集。一般就是 utf-8。

第四步:加載一個模板,創(chuàng)建一個模板對象。

第五步:創(chuàng)建一個模板使用的數(shù)據(jù)集,可以是 pojo 也可以是 map。一般是 Map。

第六步:創(chuàng)建一個 Writer 對象,一般創(chuàng)建 FileWriter 對象,指定生成的文件名。

第七步:調用模板對象的 process 方法輸出文件。

第八步:關閉流。

public static void main(String[] args) throws Exception{
	//1.創(chuàng)建配置類
	Configuration configuration=new Configuration(Configuration.getVersion());
	//2.設置模板所在的目錄 
	configuration.setDirectoryForTemplateLoading(new File("D:\\ftl"));
	//3.設置字符集
	configuration.setDefaultEncoding("utf-8");
	//4.加載模板
	Template template = configuration.getTemplate("test.ftl");
	//5.創(chuàng)建數(shù)據(jù)模型
	Map map=new HashMap();
	map.put("name", "張三");
	map.put("message", "歡迎!");
	//6.創(chuàng)建Writer對象
	Writer out =new FileWriter(new File("d:\\test.html"));
	//7.輸出
	template.process(map, out);
	//8.關閉Writer對象
	out.close();
}

上面的入門案例中Configuration配置對象是自己創(chuàng)建的,字符集和模板文件所在目錄也是在Java代碼中指定的。在項目中應用時可以將Configuration對象的創(chuàng)建交由Spring框架來完成,并通過依賴注入方式將字符集和模板所在目錄注入進去。

4. Freemarker指令

4.1 assign指令

assign指令用于在頁面上定義一個變量
(1) 定義簡單類型

<#assign linkman="周先生">
聯(lián)系人:${linkman}

(2) 定義對象類型

<#assign info={"mobile":"13812345678",'address':'北京市昌平區(qū)'} >
電話:${info.mobile}  地址:${info.address}

4.2 include指令

include指令用于模板文件的嵌套
(1) 創(chuàng)建模板文件head.ftl

<h1>你好!Freemarker!</h1>

(2) 修改入門案例中的test.ftl,在test.ftl模板文件中使用include指令引入上面的模板文件

<#include "head.ftl"/>

4.3 if指令

if指令用于判斷
(1) 在模板文件中使用if指令進行判斷

<#if success=true>
  你已通過實名認證
<#else>  
  你未通過實名認證
</#if>

(2) 在java代碼中為success變量賦值

map.put("success", true);

在freemarker的判斷中,可以使用= 也可以使用==

4.4 list指令

list指令用于遍歷
(1) 在模板文件中使用list指令進行遍歷

<#list goodsList as goods>
  商品名稱: ${goods.name} 價格:${goods.price}<br>
</#list>

(2) 在java代碼中為goodsList賦值

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

原文鏈接:https://blog.csdn.net/imagination1022/article/details/126561871

欄目分類
最近更新