FreeMarker-簡單示例


以下是簡單的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這些框架進行開發。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM