在我剛接觸FreeMarker時,只是簡單的了解FreeMarker的一些概念及工作原理,至于如何使用FreeMarker還不是非常清楚。隨著學習的深入,才漸漸對FreeMarker有了更深入的理解。本文將從基礎應用著手,以eclipse開發環境為主,分享一個FreeMarker用例的開發經驗。
Mako是一個使用Python語言開發的模板庫. 它提供了一個易用的, 非-XML 語法并可以編譯成Python內部模塊以提升性能. Mako 的語法和API借鑒了很多其他庫的思想, 包括 Django 模板, Cheetah, Myghty, 和 Genshi. 從概念上講, Mako 是一個嵌入式的 Python (即Python Server Page) 語言, 它融合了組件化設計和繼承的思想為工作提供了最直接和靈活的模式, 同時還很好的保持著 Python 語義.
Velocity是一個基于java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template language)來引用由java代碼定義的對象。當Velocity應用于web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。Velocity的能力遠不止web站點開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生源代碼和報告,或者作為其他系統的集成組件使用。Velocity也可以為Turbine web開發架構提供模板服務(template service)。Velocity + Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。
Smarty是一個php模板引擎。更準確的說,它分開了邏輯程序和外在的內容,提供了一種易于管理的方法。可以描述為應用程序員和美工扮演了不同的角色,因為在大多數情況下,他們不可能是同一個人。例如,你正在創建一個用于瀏覽新聞的網頁,新聞標題,標簽欄,作者和內容等都是內容要素,他們并不包含應該怎樣去呈現。在Smarty的程序里,這些被忽略了。模板設計者們編輯模板,組合使用html標簽和模板標簽去格式化這些要素的輸出(html表格,背景色,字體大小,樣式表,等等)。有一天程序員想要改變文章檢索的方式(也就是程序邏輯的改變)。這個改變不影響模板設計者,內容仍將準確的輸出到模板。同樣的,哪天美工吃多了想要完全重做界面,也不會影響到程序邏輯。因此,程序員可以改變邏輯而不需要重新構建模板,模板設計者可以改變模板而不影響到邏輯。
Smarty是一個php模板引擎。更準確的說,它分開了邏輯程序和外在的內容,提供了一種易于管理的方法。可以描述為應用程序員和美工扮演了不同的角色,因為在大多數情況下 ,他們不可能是同一個人。例如,你正在創建一個用于瀏覽新聞的網頁,新聞標題,標簽欄,作者和內容等都是內容要素,他們并不包含應該怎樣去呈現。在Smarty的程序里,這些被忽略了。模板設計者們編輯模板,組合使用html標簽和模板標簽去格式化這些要素的輸出(html表格,背景色,字體大小,樣式表,等等)。有一天程序員想要改變文章檢索的方式(也就是程序邏輯的改變)。這個改變不影響模板設計者,內容仍將準確的輸出到模板。同樣的,哪天美工吃多了想要完全重做界面,也不會影響到程序邏輯。因此,程序員可以改變邏輯而不需要重新構建模板,模板設計者可以改變模板而不影響到邏輯。 <br> 現在簡短的說一下什么是smarty不做的。smarty不嘗試將邏輯完全和模板分開。如果邏輯程序嚴格的用于頁面表現,那么它在模板里不會出現問題。有個建議:讓應用程序邏輯遠離模板, 頁面表現邏輯遠離應用程序邏輯。這將在以后使內容更容易管理,程序更容易升級。<br> Smarty的特點之一是"模板編譯"。意思是Smarty讀取模板文件然后用他們創建php腳本。這些腳本創建以后將被執行。因此并沒有花費模板文件的語法解析,同時每個模板可以享受到諸如Zend加速器(http://www.zend.com) 或者PHP加速器(http://www.php-accelerator.co.uk)。這樣的php編譯器高速緩存解決方案。
Velocity是基于Java的模板引擎。它允許Web頁面開發者引用Java代碼中定義的方法。Web設計者可以和Java程序開發者并行開發遵循MVC模式的Web站點。這意味著,Web設計者可以將精力放在好的Web站點設計上,而Java程序開發者可以將精力放在編寫代碼上。Velocity將Java代碼從Web頁面中分離,使Web站點更具長期可維護性,并提供了一種替代JSP或PHP的方案。
VTL(Velocity Template Language)介紹:VTL提供一種簡單、容易和干靜的方法將動態內容合并到Web頁面。VTL使用引用(references)將動態內容插入到Web頁面中。變量是一種引用,可以指向Java代碼中的定義內容,或者由Web頁面中的VTL語句來獲得值。
FreeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫FreeMarker被設計用來生成HTML Web頁面,特別是基于MVC模式的應用程序雖然FreeMarker具有一些編程的能力,但通常由Java程序準備要顯示的數據,由FreeMarker生成頁面。