網站首頁 編程語言 正文
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
相關推薦
- 2022-09-23 C#實現(xiàn)自定義光標并動態(tài)切換_C#教程
- 2022-10-30 golang基于errgroup實現(xiàn)并發(fā)調用的方法_Golang
- 2022-11-01 Go語言框架快速集成限流中間件詳解_Golang
- 2022-07-29 Golang學習之反射機制的用法詳解_Golang
- 2022-09-14 python函數(shù)默認參數(shù)使用避坑指南_python
- 2022-12-15 uboot添加自定義命令的實現(xiàn)步驟_C 語言
- 2022-11-06 解析PyCharm集成GitLab代碼倉的問題_python
- 2022-02-02 Maven命令安裝本地jar包到本地倉庫
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細win安裝深度學習環(huán)境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結構-簡單動態(tài)字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支