它是爲Java程序猿提供的一個開發包。它不是面向終於用戶的,而是爲程序猿提供的一款可以嵌入他們所開發產品的應用程序。html
這樣的分離的思想即使對一個程序猿和頁面設計師是同一我的的項目來講也都是很實用的,因爲分離使得代碼保持簡潔而且易於維護。前端
模板僅僅負責數據在頁面中的表現。不涉及不論什麼的邏輯代碼,而所有的邏輯都是由數據模型來處理的。用戶終於看到的輸出是模板和數據模型合併後建立的。java
咱們都知道。JSP在第一次運行的時候需要轉換成Servlet類,開發階段進行功能調試時,需要頻繁的改動JSP,每次改動都要編譯和轉換。那麼試想一下,一天中咱們浪費在程序編譯的時間有多少。數據庫
使得在整個流程的進行中。生成不一樣的表單就簡單了很是多。編程
FreeMarker沒有一個默認的null處理。甚至也不接受一個null值。想避免錯誤就要應用if/elseif/else 指令進行判段,假設對每一個變量都推斷的話,那麼則反而添加了編程的麻煩。 瀏覽器
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import freemarker.template.Configuration;
import freemarker.template.DefaultObjectWrapper;
import freemarker.template.Template;
import freemarker.template.TemplateException;
import freemarker.template.TemplateExceptionHandler;
import junit.framework.TestCase;
public class FreemarkerTest extends TestCase {
private String dir = "E:/.../OA/TestTotal/src/com/bjsxt/oa/freemarker";
public void testFreemarker() {
Configuration cfg = new Configuration();
try {
// 從哪裏載入模板文件
cfg.setDirectoryForTemplateLoading(new File(dir));
// 定義模版的位置,從類路徑中,相對於FreemarkerManager所在的路徑載入模版
// cfg.setTemplateLoader(new ClassTemplateLoader(FreemarkerManager.class, "templates"))
// 設置對象包裝器
cfg.setObjectWrapper(new DefaultObjectWrapper());
// 設置異常處理器
cfg
.setTemplateExceptionHandler(TemplateExceptionHandler.IGNORE_HANDLER);
// 定義數據模型
Map root = new HashMap();
root.put("abc", "世界。你好");
// 經過freemarker解釋模板,首先需要得到Template對象
Template template = cfg.getTemplate("test.ftl");
// 定義模板解釋完畢以後的輸出
PrintWriter out = new PrintWriter(new BufferedWriter(
new FileWriter(dir+"/out.txt")));
try {
// 解釋模板
template.process(root, out);
} catch (TemplateException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
第一個測試程序:${abc}
第一個測試程序:世界。你好