目錄
爲什麼使用freemarker
當用戶訪問jsp的時候,jsp本質就是servlet,所以訪問的時候會被翻譯成java類,但是想html這種靜態頁面不用翻譯直接訪問速度就快
FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。
目前企業中:主要用Freemarker做靜態頁面或是頁面展示
簡單的Freemarker測試
新建一個web工程,完整的工程目錄結構如下:
使用freemarker依賴
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.23</version>
</dependency>
首先要創建ftl模板文件
在webapp目錄下新建ftls文件夾(名稱以及存放的位置任意)存放Freemarker的模板
創建hello.ftl模板文件,(freemarker對於拓展名是沒有要求的。通常使用ftl作爲擴展名)輸入如下內容
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/>
</head>
<body>
測試:${hello}
</body>
</html>
其中的${hello}是Freemarker的語法標籤。Freemarker會將這個標籤替換爲程序中指定的內容。
測試方法
Freemarker語法
訪問Map中的key
訪問Map中的數據:
${key}
訪問POJO中的屬性
pojo中的屬性:
${stu.id}-${stu.name}
其中stu是pojo對象對應的key:這個對象還是放在map中傳遞過去的
訪問集合中的數據
<#list 集合 as 元素>
取集合中的數據
<#list studentList as student>
下標:${student_index}
集合中的元素:${student.id}/${student.name}
</#list>
if判斷
<#if student_index % 2 == 0>
我是if
<#else>
我是else
</#if>
日期
${date?date} 2016-9-13
${date?time} 17:53:55
${date?datetime} 2016-9-13 17:53:55
${date?string("yyyy/MM/dd")}
其中date是屬性名
dataModel.put("date",new Date
空值處理
如果模板中引用的key不存在,會報異常,用${key!}代表空字符串
處理: ${aaa!"默認值"}或者${aaa!}代表空字符串
include
一個ftl模板中可以引用另一個模板
<#include "hello.ftl">
());