以下是簡單的FreeMarker示例,直接采用模板 + 數據模型 = 輸出的方式。示例中是Application的項目,主要用於展示模板輸出HTML文件的功能。
示例:
1、引入POM依賴
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker --> <dependency> <groupId>org.freemarker</groupId> <artifactId>freemarker</artifactId> <version>2.3.26-incubating</version> </dependency>
2、新建test.ftl文件
<html> <head> <title>Welcome!</title> </head> <body> <h1> Welcome ${user}<#if user == "Big Joe">, our beloved leader</#if>! </h1> </body> </html>
3、新建FreeMarkerUtil.java類用於生成通過ftl模板生成html文件
package com.jsoft.testfreemarker.test1; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.io.PrintWriter; import java.net.URISyntaxException; import java.util.Map; import freemarker.template.Configuration; import freemarker.template.Template; import freemarker.template.TemplateException; public class FreeMarkerUtil { /** * 獲取模板 * * @param name * @return */ public Template getTemplate(String name) { try { // 通過FreeMarker的Configuration讀取相應的ftl Configuration cfg = new Configuration(); // 設定去哪里讀取相應的ftl模板文件 cfg.setClassForTemplateLoading(this.getClass(),"/"); // 在模板文件目錄中找到名稱為name的文件 Template temp = cfg.getTemplate(name); return temp; } catch (IOException e) { e.printStackTrace(); } return null; } /** * 輸出到控制台 * * @param name * 模板文件名 * @param root */ public void print(String name, Map<String, Object> root) { try { // 通過Template可以將模板文件輸出到相應的流 Template temp = this.getTemplate(name); temp.process(root, new PrintWriter(System.out)); } catch (TemplateException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 輸出到文件 * * @param name * @param root * @param outFile */ public void fprint(String name, Map<String, Object> root, String outFile) { FileWriter out = null; try { // 通過一個文件輸出流,就可以寫到相應的文件中 try { out = new FileWriter(new File(App.class.getResource("/").toURI().getPath() + outFile)); } catch (URISyntaxException e) { // TODO Auto-generated catch block e.printStackTrace(); } Template temp = this.getTemplate(name); temp.process(root, out); } catch (IOException e) { e.printStackTrace(); } catch (TemplateException e) { e.printStackTrace(); } finally { try { if (out != null) out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
4、生成后的html內容:
<html> <head> <title>Welcome!</title> </head> <body> <h1> Welcome Big Joe, our beloved leader! </h1> </body> </html>
測試工程:https://github.com/easonjim/5_java_example/tree/master/freemarker/test1
總結:
1、其實這個例子是在Application基礎上展示生成的html文件的,但實際項目不應該是這樣去做,而是結合Servlet、Spring、Status這些框架進行開發。
