您好,登錄后才能下訂單哦!
這篇文章主要介紹“FreeMarker的原理和應用”,在日常操作中,相信很多人在FreeMarker的原理和應用問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”FreeMarker的原理和應用”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
FreeMarker是一個用Java開發的模版引擎,即一種基于模版和要改變的數據,并用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。它不是面向最終用戶的,而是一個java類庫,是一款程序員可以嵌入他們所開發產品的組件。
FreeMarker并不關心數據的來源,只是根據模版的內容,將數據模版在模版中顯示并輸出文件(通常是html,也可以生成其他格式的文本文件)
數據模型:數據模型在java中可以是基本類型也可以說List,Map,Pojo等復雜類型
快速入門:
一、添加依賴
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <version>1.18.8</version> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-io</artifactId> <version>1.3.2</version> </dependency> <dependency> <groupId>com.squareup.okhttp3</groupId> <artifactId>okhttp</artifactId> <version>4.1.0</version> </dependency> </dependencies>
二、編寫啟動類
@SpringBootApplication public class FreemarkerApplication { public static void main(String[] args) { SpringApplication.run(FreemarkerApplication.class); } }
三、編寫實體類
@Data @ToString @AllArgsConstructor @NoArgsConstructor public class Student { private String name; private int age; private Date birthday; private Float money; private List<Student> friends; private Student bestFriends; }
四、在resources下創建templates文件夾,創建模版文件 test1.ftl
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> hello ${name}! </body> </html>
五、編寫controller
@Controller @RequestMapping("/freemarker") public class FreemarkerController { @RequestMapping("/test1") public String freemarker(Map<String ,Object> map){ map.put("name","cxy"); return "test1"; } }
六、啟動測試
freemarker基礎知識:
1、注釋,即<#-- 內容 -->,介于其之間的內容會被freemarker忽略
2、插值,即${},會被freemarker用真實值替代
3、FTL,和html標記類似,名字前加#予以區別,freemarker會解析標簽中的表達式或邏輯
4、文本,僅文本信息,直接輸出內容
List指令:在模版中遍歷數據
<table> <#list stus as stu> <tr> <td>${stu.index}</td> <td>${stu.name}</td> <td>${stu.age}</td> <td>${stu.money}</td> </tr> </#list> </table>
Map指令
<table> <#list stuMap ?keys as k> <tr> <td>${k.index - 1}</td> <td>${stuMap[k].name}</td> <td>${stuMap[k].age}</td> <td>${stuMap[k].money}</td> </tr> </#list> </table>
if指令
<td<#if stuMap[k].name =="cxy" ></#if>>${k.index - 1}</td>
空值處理:判斷某變量是否存在使用??
<#if stuMap??> <tr> <td<#if stuMap[k].name =="cxy" ></#if>>${k.index - 1}</td> <td>${stuMap[k].name}</td> <td>${stuMap[k].age}</td> <td>${stuMap[k].money}</td> </tr> </#if>
注意:缺失變量默認值使用!指定一個默認值,當變量為空時顯示默認值。
內建函數
1、集合大小:${集合名?size}
2、日期格式化:
${today?date},顯示年月日
${today?time},顯示時分秒
${today?datetime},顯示日期加時間
${today?string(yyyy-MM-dd)},按字符格式顯示
3、${money?c}將數字以字符串形式顯示,不然每三位添加一個逗號
4、將字符串轉成對象 <#assign data=text?eval/>
靜態化實現
1、使用模版文件靜態化
2、使用模版字符串靜態化
模版靜態化測試代碼
public class FreemarkerTest { @Test public void testGenerateHtmk() throws IOException, TemplateException { Configuration configuration = new Configuration(Configuration.getVersion()); URL resource = this.getClass().getClassLoader().getResource("templates/"); String path = resource.getPath(); configuration.setDirectoryForTemplateLoading(new File(path)); configuration.setDefaultEncoding("utf-8"); Template template = configuration.getTemplate("test1.ftl"); System.out.println(template); Map<String,Object> map = new HashMap<>(); map.put("name","黑馬程序員"); String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); System.out.println(content); } }
到此,關于“FreeMarker的原理和應用”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。