freemaker優缺點

    • 1.什麼是FreeMarker?FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具,使用純Java編寫。FreeMarker被設計用來生成HTMLWeb頁面,特別是基於MVC模式的應用程序。所謂模板,就是一份已經寫好了基本內容,有着固定格式的文檔,其中空出或者用佔位符標識的內容,由使用者來填充,不一樣的使用者給出的數據是不一樣的。在模板中的佔位符,在模板運行時,由模板引擎來解析模板,並採用動態數據替換佔位符部分的內容。FreeMarker不是一個Web應用框架
    • 1.什麼是 FreeMarker? html


      FreeMarker是一個模板引擎,一個基於模板生成文本輸出的通用工具,使用純Java編寫。FreeMarker被設計用來生成HTMLWeb頁面,特別是基於MVC模式的應用程序。程序員



      所謂模板,就是一份已經寫好了基本內容,有着固定格式的文檔,其中空出或者用佔位符標識的內容,由使用者來填充,不一樣的使用者給出的數據是不一樣的。在模板中的佔位符,在模板運行時,由模板引擎來解析模板,並採用動態數據替換佔位符部分的內容。數據庫



      FreeMarker不是一個Web應用框架,而適合做爲Web應用框架一個組件,FreeMarker與Web容器無關,即在Web運行時,它並不知道Servlet或HTTP。它不只能夠用做表現層的實現技術,並且還能夠用於生成XML,JSP或Java文件等。編程


      雖然FreeMarker具備一些編程的能力,但一般由Java程序準備要顯示的數據,由FreeMarker生成頁面,經過模板顯示準備的數據(以下圖)瀏覽器


      FreeMaker教程(一)-----FreeMaker簡介_Java


      2.FreeMake的優勢服務器


      分離表現層和業務邏輯框架


      使用 JSP 開發過程當中在頁面中大量的存在業務邏輯的代碼,使得頁面內容凌亂,在後期大量的修改維護過程當中就變得很是困難。 FreeMarker 根本不支持 Java 腳本代碼,而是使用 el 表達式來輸出展現數據。 FreeMarker 的設計初衷就是: 模板 + 數據模型 = 輸出 ,模板只負責數據在頁面中的表現,不涉及任何的邏輯代碼,而全部的邏輯都是由數據模型來處理的。用戶最終看到的輸出是模板和數據模型合併後建立的工具


      提升開發效率spa


      在咱們以往的開發中,使用的都是 JSP 頁面來展現數據的,即所謂的表現層。咱們都知道, JSP 在第一次執行的時候須要轉換成 Servlet 類,開發階段進行功能調適時,須要頻繁的修改 JSP ,每次修改都要編譯和轉換,那麼試想一天中咱們浪費在程序編譯的時間有多少。相對於 JSP 來講, FreeMarker 模板技術不存在編譯和轉換的問題,因此就不會存在上述問題。並且開發過程當中,咱們在沒必要在等待界面設計開發人員完成頁面原形後,咱們再來開發程序。插件


      分工明確


      以往用JSP展示數據時,程序員並不熟悉界面設計技術,反之界面開發人員,也並不熟悉程序語言。協調工做很困難,使用FreeMarker後,做爲界面開發人員,只專心建立HTML文件、圖像以及Web頁面的其餘可視化方面,不用理會數據;而程序開發人員則專一於系統實現,負責爲頁面準備要顯示的數據


      3.FreeMarker的缺點


      1.FreeMarker的缺點一,應用FreeMarker模板技術,在修改模板後,可能會看到已通過期的數據。如:生成靜態的HTML頁面後,若是一旦模板改變,而沒有及時更新模板生成的HTML頁面的話,用戶看到的就是過時的數據。 


      2.FreeMarker的缺點二,FreeMarker模板技術在應用過程當中,FreeMarker中的變量必需要賦值,若是不賦值,那麼就會拋出異常。想避免錯誤就要應用if/elseif/else 指令進行判段,若是對每個變量都判斷的話,那麼則反而增長了編程的麻煩。 


      3.FreeMarker的缺點三,FreeMarker的map限定key必須是string,其餘數據類型沒法操做。 


      4.FreeMarker的缺點四,FreeMarker不支持集羣應用。爲了編成的方便性,把序列化的東西都放到了Session中,如Session,request等,在開發的過程當中確實方便,但若是將應用放到集羣中,就會出現錯誤。 


      4.FreeMarker特性



      一、通用目標



      可以生成各類文本:HTML、XML、RTF、Java源代碼等等 
      易於嵌入到你的產品中:輕量級;不須要Servlet環境 
      插件式模板載入器:能夠從任何源載入模板,如本地文件、數據庫等等 
      你能夠按你所需生成文本:保存到本地文件;做爲Email發送;從Web應用程序發送它返回給Web瀏覽器



      二、強大的模板語言



      全部經常使用的指令:include、if/elseif/else、循環結構 
      在模板中建立和改變變量 
      幾乎在任何地方均可以使用複雜表達式來指定值 
      命名的宏,能夠具備位置參數和嵌套內容 
      名字空間有助於創建和維護可重用的宏庫,或者將一個大工程分紅模塊,而沒必要擔憂名字衝突 
      輸出轉換塊:在嵌套模板片斷生成輸出時,轉換HTML轉義、壓縮、語法高亮等等;你能夠定義本身的轉換



      三、通用數據模型



      FreeMarker不是直接反射到Java對象,Java對象經過插件式對象封裝,以變量方式在模板中顯示 
      你可使用抽象(接口)方式表示對象(JavaBean、XML文檔、SQL查詢結果集等等),告訴模板開發者使用方法,使其不受技術細節的打擾



      四、爲Web準備



      在模板語言中內建處理典型Web相關任務(如HTML轉義)的結構 
      可以集成到Model2 Web應用框架中做爲JSP的替代 
      支持JSP標記庫 
      爲MVC模式設計:分離可視化設計和應用程序邏輯;分離頁面設計員和程序員



      五、智能的國際化和本地化



      字符集智能化(內部使用UNICODE) 
      數字格式本地化敏感 
      日期和時間格式本地化敏感 
      非US字符集能夠用做標識(如變量名) 
      多種不一樣語言的相同模板



      六、強大的XML處理能力



      <#recurse> 和<#visit>指令(2.3版本)用於遞歸遍歷XML樹 
      在模板中清楚和直覺的訪問XML對象模型 
      開源論壇 JForum 就是使用了 FreeMarker 作爲頁面模板。 


      5.Freemarker生成靜態頁面的原理



      Freemarker 生成靜態頁面,首先須要使用本身定義的模板頁面,這個模板頁面能夠是最最普通的html,也能夠是嵌套freemarker中的 取值表達式, 標籤或者自定義標籤等等,而後後臺讀取這個模板頁面,解析其中的標籤完成相對應的操做, 而後採用鍵值對的方式傳遞參數替換模板中的的取值表達式,作完以後 根據配置的路徑生成一個新的html頁面, 以達到靜態化訪問的目的。


      6.Freemarker提供的標籤


      Freemarker提供了不少有用 經常使用的標籤,Freemarker標籤都是<#標籤名稱>這樣子命名的,${value} 表示輸出變量名的內容 ,具體以下:



      一、list:該標籤主要是進行迭代服務器端傳遞過來的List集合,好比:


      <#list nameList as names> 
      ${names} 
      </#list> 

      names是list循環的時候取的一個循環變量,freemarker在解析list標籤的時候,等價於:


      for (String names : nameList) { 
      System.out.println(names); 

      二、if:該標籤主要是作if判斷用的,好比:


      <#if (names=="陳靖仇")> 
      他的武器是: 十五~~ 
      </#if> 

      這個是條件判斷標籤,要注意的是條件等式必須用括號括起來, 等價於:


      if(names.equals("陳靖仇")){ 
      System.out.println("他的武器是: 十五~~"); 

      三、include:該標籤用於導入文件用的。 


      <#include "include.html"/> 

      這個導入標籤很是好用,特別是頁面的重用。


      另外在靜態文件中可使用${} 獲取值,取值方式和el表達式同樣,很是方便。 

相關文章
相關標籤/搜索