freemarker:簡介

Apache FreeMarker模板引擎:Java庫來生成文本輸出(HTML網頁,電子郵件,配置文件,源代碼,等等)基於模板和變化的數據。模板都寫在FreeMarker模板語言(FTL),這是一個簡單的、專門的語言(不是一個成熟的編程語言(好比PHP)。你要準備的數據顯示在一個真正的編程語言,就像數據庫查詢和作生意的計算問題,而後模板已經準備好的數據的顯示。模板中你關注如何呈現數據,和外部的模板你關注哪些數據。html

 

 

這種方法一般被稱爲MVC(模型-視圖-控制器)模式,併爲動態網頁特別受歡迎。它有助於分離網頁設計師(HTML做者)從開發者(Java程序員一般)。在模板設計者不會面臨複雜的邏輯,能夠改變頁面的外觀無需程序員修改或從新編譯代碼。程序員

FreeMarker最初建立時生成HTML頁面在MVC web應用程序框架,它不是綁定到servlet或東西的HTML或之上。它的非web應用程序環境中使用。web

 

假設你在一個網站須要一個HTML頁面,相似於:數據庫

 

< html >
<頭>
<標題>歡迎! < /名稱>
< / ><身體>
<標題>歡迎John Doe ! < / h1 >
< p >咱們的最新產品:
< a href = "產品/ greenmouse。html " >綠色鼠標< / > !
< /身體>
< / html >

但用戶的名稱(上面的「John Doe」)取決於登陸的用戶是誰,和最新的產品信息應該來自一個數據庫。由於這個數據變化,你不能不能使用靜態HTML。相反,您能夠使用一個模板所需的輸出。模板是同樣的靜態HTML,除了它包含一些指令FreeMarker使其動態:編程

 

< html >
<頭>
<標題>歡迎! < /名稱>
< / ><身體>
<標題>歡迎$ { user } ! < / h1 >
< p >咱們的最新產品:
< a href = " $ { latestProduct.url } " > $ { latestProduct.name } < / > !
< /身體>
< / html >

模板存儲在Web服務器上,一般就像靜態HTML頁面。但每當有人訪問這個頁面,FreeMarker介入,將純HTML的模板動態替換 ${...}s與最新的內容,並將結果發送到訪問者的Web瀏覽器。因此訪問者的瀏覽器將收到相似HTML(即第一個例子。純HTML沒有FreeMarker指令),它不會察覺到FreeMarker在服務器上使用。(固然,模板文件存儲在Web服務器上沒有改變,替換隻出如今Web服務器的響應)。瀏覽器

注意,模板不包含編程邏輯來找出當前的客人是誰,或查詢數據庫得到最新的產品。要顯示的數據準備FreeMarker外,一般經過部分寫在一些「真實」編程語言(如Java)。模板做者沒必要知道這些值是如何計算的。事實上,這些值的計算方式能夠徹底改變了模板能夠保持徹底相同,並且,徹底改變了頁面的外觀不會碰到任何東西,但模板。表示邏輯與業務邏輯的分離能夠特別有用,當模板做者(設計師)和程序員都是不一樣的個體,但也有助於管理應用程序的複雜性,若是他們是同一我的。保持模板集中在陳述問題(視覺設計,佈局和格式)是一個關鍵的有效使用像FreeMarker模板引擎。服務器

準備的所有數據稱爲數據模型的模板。模板做者而言,數據模型是一個樹狀結構(如硬盤上的文件夾和文件),而在這種狀況下,能夠可視化爲:框架

(根)
|
+ -用戶=「大喬」
|
+ - latestProduct
|
+ - url =「產品/ greenmouse.html」
|
+ - name =「綠色鼠標」
注意:

 

注意:編程語言

以上只是一個可視化;數據模型的文本格式,它從Java對象。對於Java程序員,根多是一個Java對象 getUser() getLatestProduct()方法,或者一個Java Map "user""latestProducts"鑰匙。一樣的, latestProduct也許是一個Java對象 getUrl()getName()方法。函數

早些時候,你從這個數據模型的選擇值, user latestProduct.name表達式。若是咱們繼續類比數據模型就像一個文件系統,而後「(根)」,latestProduct對應的目錄(文件夾), user, url name文件的目錄。

歸納、模板和數據模型的須要FreeMarker生成輸出(如第一次顯示的HTML):

模板+ 數據模型的= 輸出

 

FreeMarker幾個亮點:

  • 強大的模板語言:條件塊、迭代、做業、字符串和算術運算和格式化,宏和函數,包括其餘模板,逃避在默認狀況下(可選),和許多更多

  • 多用途和輕量級:零依賴,任何輸出格式,能夠從任何地方加載模板(可插入),許多配置選項

  • 國際化/ localization-aware:語言環境敏感的數量和日期/時間格式,局部模板的變化。

  • XML處理功能:刪除XML DOM-s到數據模型的遍歷,甚至以聲明的方式處理它們

  • 通用的數據模型的:Java對象暴露在模板變量經過可插入適配器的樹,這決定模板如何看待他們。

相關文章
相關標籤/搜索