<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-67  評論-522  文章-0  trackbacks-0
        這是本系列的最后一篇,主要講一下FreeMarker模板引擎的基本概念與常用指令的使用方式。
        一、FreemMarker基本概念
        FreemMarker是一個用Java語言編寫的模板引擎,它是一個基于模板來生成文本輸出的一個工具。是除了JSP之外被使用得最多的頁面模板技術之一,另一個比較有名的模板則是Velocity。
        用戶可以使用FreeMarker來生成所需要的內容,通常由Java提供數據模型,FreeMarker通過模板引擎渲染數據模型,這樣最終得到我們想要的內容。使用FreeMarker作為展示層,訪問速度會比較快,因為FreeMarker引擎渲染頁面的時候,只需要把數據填充進去就可以了,其它的都是固定的模板內容。另外,使用FreeMarker能夠很方便的動態生成靜態頁面,對于大訪問量的網站,配合nginx可以很好的提高網站性能。
        ssm3這個例子中,就是使用的FreeMarker模板技術來實現的視圖層。本文主要是對ssm3例子中所使用到的FreeMarker知識點進行介紹,其它更詳細的內容還請大家參考官方文檔。
        在本文的最后有ssm3源碼,有需要的朋友可以自行下載,例子是最基本的,方便入門的朋友學習與了解。
        二、FreemMarker配置說明
        Spring 3.0框架中,已經集成好了FreeMarker,對它進行了適度的封裝,我們使用起來非常方便。要使用FreemMarker模板的功能,只需要進行下面兩項配置。
        aFreemMarker視圖解析器
        
        當我們發出REST請求訪問資源時,當Controller執行完畢,需要返回結果給我們時,那些返回字符串指定的都是結果頁面,這時,就通過上面這個解析器,根據返回的那些字符串解析成我們設計的頁面。另外,如果要使用Spring提供的FreeMarker宏,還需要加上exposeSpringMacroHelpers這個屬性,將它設為true,你可以將這些宏理解為一種功能,或一個方法。
        b、FreemMarker環境配置
        
        上面這段配置設置了FreeMarker環境屬性,templateLoaderPath指定模板文件存放的路徑,它相當于是定義了模板的前綴,所有顯示的頁面都遵循這個路徑規則。還指定了模板文件的編碼格式,如果不顯示配置,否則會采用系統默認編碼,這很容易出現亂碼的情況,所以一定要將編碼統一設置,不要再使用gb2312gbk之類的編碼方式了,采用國際統一的Unicode UTF-8編碼是比較好的習慣。
        除了上面我們看到的這些配置設置外,FreeMarkerConfigurer還有一個很重要的屬性是freemarkerVariables,它可以用來設置我們自己開發的自定義指令標簽,以滿足不同的業務需求。
        三、FreemMarker指令標記
        要想在最終結果頁面中填充數據,需要用到FreeMarker標記指令來達到這一目的。不過這些標記指令一般不會單獨出現,基本上是多個組合使用,為了讓大家方便理解,大象就以ssm3中的一些頁面為例子進行說明。
        FreeMarker有兩種類型:預定義指令和用戶自定義指令。預定義指令是以#號開頭,用戶自定義的指令則使用@開頭。而SpringFreeMarker宏也是以@開頭。
        
        指令assign表示定義一個變量,它的格式是<#assign name=value>,在這里ctx是變量名name,value可以是一個值,也可以是一個表達式。還記得FreeMarker解析器中我們設置的requestContextAttribute屬性為rc吧,我們現在就是用它來獲得我們應用上下文,我們的應用名為ssm3,所以這里就是取得這個值,將它賦給ctx,上面這些都寫在meta.html這個模板頁面中,這樣我們就可以在所有模板頁中引用這個變量。
        在表達式中,使用了一個!符號,它的作用是如果rc.getContextPath()null或不存在,就將字符串”/ssm3”作為默認值賦給變量ctx。這樣,即使萬一因為某些原因無法取得上下文值,我們的ctx變量也不會因此而出現空值或不正確的值,從而引起系統異常。
        在使用FreeMarker時,一定要注意一點,FreeMarker絕不允許引用不存在的變量(即變量為null),除非明確地告訴它當變量不存在(null)時如何處理。
        上面這一點非常重要,往往很多時候Bug就出在空值未處理上面,請大家使用FreeMarker的時候一定要多加注意。
        
        指令include載入模板頁,可以使用它在一個模板中插入另外一個FreeMarker模板文件。
        
        <#if>條件判斷指令,list??是否為空判斷,如果list不為null才會往下執行。??一般都與if指令一起執行。
        <#list list as entity>開始循環遍歷,listmodel里面定義的屬性名稱,aslist循環定義變量的語法,entitylist循環變量的名稱。${...}它和JSTL里的同一個表達式含義相同。FreeMarker都是在輸出時,用實際值替換。
        源碼下載:ssm3     
        本文為菠蘿大象原創,如要轉載請注明出處。
    http://bolo.blogjava.net/
    posted on 2012-04-23 08:38 菠蘿大象 閱讀(9864) 評論(7)  編輯  收藏 所屬分類: Spring3

    評論:
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-04-24 21:55 | 菠蘿大象
    有朋友問我怎么沒有數據庫,這個和之前的SSH2例子用的是同一個數據庫,請到SSH2第五篇下載示例源碼。  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-06-06 21:44 | bj
    源碼確實不錯,收益匪淺!
    有幾處問題:1)角色的修改,中文無法正常保存;
    2)user表的建表語句和代碼不符;
    3)角色的新增報錯,估計源自role表的id不是自增長的;
    4)用戶的查詢不起作用。
      回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-06-07 08:54 | 菠蘿大象
    @bj
    你提的問題我看了下。
    1,中文是沒問題的,可能是你的mysql的設置,我之前寫過一篇mysql的中文問題解決方法的文章,你可以看下。
    2,我確實加了一個password字段,這點我沒注意,謝謝指正。這個password我愿意是準備加上攔截器功能的。
    3,SSH2里面有個主鍵管理表,所以role表沒加自增長,這里需要,也是我的錯,沒指出來,謝謝批評。
    4,查詢是可以的,你的user表里有數據么?
    我附上兩個表的sql語句

    CREATE TABLE `user` (
    `id` int(11) NOT NULL auto_increment,
    `username` varchar(20) default NULL,
    `password` varchar(20) default NULL,
    `role_id` int(11) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8

    CREATE TABLE `role` (
    `id` int(11) NOT NULL auto_increment,
    `name` varchar(50) default NULL,
    PRIMARY KEY (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8
      回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-06-18 17:36 | 世紀末海
    話說,在本機用jetty:run跑是正常的顯示hello.html,為什么用maven install打包以后放在tomcat下的主頁是index.html...servlet-context.xml下的<mvc:view-controller path="/" view-name="forward:/hello" />
    沒起作用  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-06-19 09:25 | 菠蘿大象
    @世紀末海
    你說的問題我看了下,是我疏忽了,這應該是jetty和tomcat內部機制不同導致的,我測試的jetty是6.1.26,tomcat是7.0.23,我想了個折中的解決辦法,可以把index.html改成index.jsp,里面的內容換成<%request.getRequestDispatcher("hello").forward(request,response);%>,輸入http:localhost:8080/ssm3 就可以訪問了。  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-08-17 23:45 | 老北
    新注冊了個帳號,就為了一句評論~
    入門經典,值得一看,謝謝分享,繼續加油  回復  更多評論
      
    # re: Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解實例詳解(五) 2012-10-08 15:31 | 伍葉春
    謝謝分享 受教了  回復  更多評論
      
    主站蜘蛛池模板: 一级成人生活片免费看| 久久国产色AV免费观看| 国产精品亚洲va在线观看| 在线观看免费播放av片| 亚洲男女一区二区三区| 久久久久久久久久国产精品免费| 亚洲性猛交XXXX| **真实毛片免费观看| 国产精品亚洲专区无码牛牛| 亚洲成A人片在线观看WWW| 噼里啪啦电影在线观看免费高清| 日日摸夜夜添夜夜免费视频| 亚洲国产精品成人综合色在线婷婷| 日本不卡在线观看免费v| 亚洲大成色www永久网址| 亚洲成年看片在线观看| 亚洲一区二区三区免费| 亚洲国产精品线观看不卡 | 国产精品亚洲产品一区二区三区| 7m凹凸精品分类大全免费| 亚洲AV无码之国产精品| 亚洲黄色免费在线观看| 亚洲熟伦熟女新五十路熟妇| 女人18一级毛片免费观看| 国产精品亚洲专区无码WEB| 亚洲日韩图片专区第1页| mm1313亚洲精品国产| 性生交片免费无码看人| 美女18一级毛片免费看| 亚洲午夜精品国产电影在线观看| 免费成人黄色大片| 拨牐拨牐x8免费| 亚洲成人免费在线| 中文字幕手机在线免费看电影 | 欧洲人成在线免费| 亚洲字幕在线观看| 亚洲AV区无码字幕中文色| 亚洲精品一级无码鲁丝片| 日本无卡码免费一区二区三区| 免费成人激情视频| 99爱视频99爱在线观看免费 |