FreeMarker是一個用Java語言編寫的模板引擎,它基於模板來生成文本輸出。FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不僅可以用作表現層的實現技術,而且還可以用於生成XML,JSP或Java 等。
目前企業中:主要用Freemarker做靜態頁面或是頁面展示。
Freemarker的使用方法:
原理一句話,就是你給Freemarker模板和數據,Freemarker幫你把數據充入模板中並生成一個文件。
引入Freemarker依賴包
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>版本</version>
</dependency>
使用步驟:
第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。
第二步:設置模板文件所在的路徑。
第三步:設置模板文件使用的字符集。一般就是utf-8.
第四步:加載一個模板,創建一個模板對象。
第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。
第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。
第七步:調用模板對象的process方法輸出文件。
第八步:關閉流。
模板:
${hello}
代碼:
@Test
public void genFile() throws Exception {
// 第一步:創建一個Configuration對象,直接new一個對象。構造方法的參數就是freemarker對於的版本號。
Configuration configuration = new Configuration(Configuration.getVersion());
// 第二步:設置模板文件所在的路徑。
configuration.setDirectoryForTemplateLoading(new File("D:/ftls"));
// 第三步:設置模板文件使用的字符集。一般就是utf-8.
configuration.setDefaultEncoding("utf-8");
// 第四步:加載一個模板,創建一個模板對象。
Template template = configuration.getTemplate("hello.ftl");
// 第五步:創建一個模板使用的數據集,可以是pojo也可以是map。一般是Map。
Map dataModel = new HashMap<>();
//向數據集中添加數據
dataModel.put("hello", "this is my first freemarker test.");
// 第六步:創建一個Writer對象,一般創建一FileWriter對象,指定生成的文件名。
Writer out = new FileWriter(new File("D:/hello.html"));
// 第七步:調用模板對象的process方法輸出文件。
template.process(dataModel, out);
// 第八步:關閉流。
out.close();
}
模板的語法:
訪問map中的key: ${key}
訪問pojo中的屬性: ${key.property}
取集合中的數據:
<#list studentList as student>
${student.id}
${studnet.name}
</#list>
取循環中的下標:
<#list studentList as student>
${student_index}
</#list>
判斷:
<#if student_index % 2 == 0>
<#else>
</#if>
日期類型格式化:
Null值的處理:
Include標籤:
Freemarker整合spring
引入Freemarker的jar包外,還要引入spring與Freemarker的整合包:
spring的配置文件如下:配置一個bean
<bean id="freemarkerConfig"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer">
<property name="templateLoaderPath" value="/WEB-INF/ftl/" />
<property name="defaultEncoding" value="UTF-8" />
</bean>
編寫一Controller進行測試:
請求的url:/genhtml 參數:無 返回值:ok (String, 需要使用@ResponseBody)
業務邏輯:
1、從spring容器中獲得FreeMarkerConfigurer對象。
2、從FreeMarkerConfigurer對象中獲得Configuration對象。
3、使用Configuration對象獲得Template對象。
4、創建數據集
5、創建輸出文件的Writer對象。
6、調用模板對象的process方法,生成文件。
7、關閉流。
加載配置文件web.xml的配置:
@Controller
public class HtmlGenController {
@Autowired
private FreeMarkerConfigurer freeMarkerConfigurer;
@RequestMapping("/genhtml")
@ResponseBody
public String genHtml()throws Exception {
// 1、從spring容器中獲得FreeMarkerConfigurer對象。
// 2、從FreeMarkerConfigurer對象中獲得Configuration對象。
Configuration configuration = freeMarkerConfigurer.getConfiguration();
// 3、使用Configuration對象獲得Template對象。
Template template = configuration.getTemplate("hello.ftl");
// 4、創建數據集
Map dataModel = new HashMap<>();
dataModel.put("hello", "1000");
// 5、創建輸出文件的Writer對象。
Writer out = new FileWriter(new File("D:/temp/term197/out/spring-freemarker.html"));
// 6、調用模板對象的process方法,生成文件。
template.process(dataModel, out);
// 7、關閉流。
out.close();
return "OK";
}
}