化-01-頁面靜態(tài)化Freemaker)
健康管理項目 第7章1. 頁面靜態(tài)化介紹本章課程中我們已經實現了移動端套餐列表頁面和套餐詳情頁面的動態(tài)展示。但是我們需要思考一個問題就是對于這兩個頁面來說每次用戶訪問這兩個頁面都需要查詢數據庫獲取動態(tài)數據進行展示而且這兩個頁面的訪問量是比較大的這就對數據庫造成了很大的訪問壓力并且數據庫中的數據變化頻率并不高。那我們需要通過什么方法為數據庫減壓并提高系統(tǒng)運行性能呢答案就是頁面靜態(tài)化。頁面靜態(tài)化其實就是將原來的動態(tài)網頁(例如通過ajax請求動態(tài)獲取數據庫中的數據并展示的網頁)改為通過靜態(tài)化技術生成的靜態(tài)網頁這樣用戶在訪問網頁時服務器直接給用戶響應靜態(tài)html頁面沒有了動態(tài)查詢數據庫的過程。那么這些靜態(tài)HTML頁面還需要我們自己去編寫嗎其實并不需要我們可以通過專門的頁面靜態(tài)化技術幫我們生成所需的靜態(tài)HTML頁面例如Freemarker、thymeleaf等。2. Freemarker介紹FreeMarker 是一個用 Java 語言編寫的模板引擎它基于模板來生成文本輸出。FreeMarker與 Web 容器無關即在 Web 運行時它并不知道 Servlet 或 HTTP。它不僅可以用作表現層的實現技術而且還可以用于生成 XMLJSP 或 Java 等。3. Freemarker入門案例3.1 環(huán)境搭建創(chuàng)建工程freemarker_demo并導入Freemarker的maven坐標!--freemarker-- dependency groupIdorg.springframework.boot/groupId artifactIdspring-boot-starter-freemarker/artifactId /dependency3.2 創(chuàng)建模板文件模板文件中有四種元素1、文本直接輸出的部分2、注釋即#–…–格式不會輸出3、插值Interpolation即${…}部分,將使用數據模型中的部分替代輸出4、FTL指令FreeMarker指令和HTML標記類似名字前加#予以區(qū)分不會輸出Freemarker的模板文件后綴可以任意一般建議為ftl。在D盤創(chuàng)建ftl目錄在ftl目錄中創(chuàng)建名稱為test.ftl的模板文件內容如下html head meta charsetutf-8 titleFreemarker入門/title /head body #--我只是一個注釋我不會有任何輸出 -- ${name}你好${message} /body /html3.3 生成文件使用步驟第一步創(chuàng)建一個 Configuration 對象直接 new 一個對象。構造方法的參數就是 freemarker的版本號。第二步設置模板文件所在的路徑。第三步設置模板文件使用的字符集。一般就是 utf-8。第四步加載一個模板創(chuàng)建一個模板對象。第五步創(chuàng)建一個模板使用的數據集可以是 pojo 也可以是 map。一般是 Map。第六步創(chuàng)建一個 Writer 對象一般創(chuàng)建 FileWriter 對象指定生成的文件名。第七步調用模板對象的 process 方法輸出文件。第八步關閉流。public static void main(String[] args) throws Exception{ //1.創(chuàng)建配置類 Configuration configurationnew Configuration(Configuration.getVersion()); //2.設置模板所在的目錄 configuration.setDirectoryForTemplateLoading(new File(D:\\ftl)); //3.設置字符集 configuration.setDefaultEncoding(utf-8); //4.加載模板 Template template configuration.getTemplate(test.ftl); //5.創(chuàng)建數據模型 Map mapnew HashMap(); map.put(name, 張三); map.put(message, 歡迎來到健康管理系統(tǒng)); //6.創(chuàng)建Writer對象 Writer out new FileWriter(new File(d:\\ftl\\test.html)); //7.輸出 template.process(map, out); //8.關閉Writer對象 out.close(); }上面的入門案例中Configuration配置對象是自己創(chuàng)建的字符集和模板文件所在目錄也是在Java代碼中指定的。在項目中應用時可以將Configuration對象的創(chuàng)建交由Spring框架來完成并通過依賴注入方式將字符集和模板所在目錄注入進去。4. Freemarker指令4.1 assign指令assign指令用于在頁面上定義一個變量1定義簡單類型#assign linkman周先生 聯系人${linkman}2定義對象類型#assign info{mobile:1866666666,address:廣州天河} 電話${info.mobile} 地址${info.address}4.2 include指令include指令用于模板文件的嵌套1創(chuàng)建模板文件head.ftlh1攻城獅/h12修改入門案例中的test.ftl在test.ftl模板文件中使用include指令引入上面的模板文件#include head.ftl/4.3 if指令if指令用于判斷1在模板文件中使用if指令進行判斷#if successtrue 你已通過實名認證 #else 你未通過實名認證 /#if2在java代碼中為success變量賦值map.put(success, true);在freemarker的判斷中可以使用 也可以使用4.4 list指令list指令用于遍歷1在模板文件中使用list指令進行遍歷#list goodsList as goods 商品名稱 ${goods.name} 價格${goods.price}br /#list2在java代碼中為goodsList賦值List goodsListnew ArrayList(); Map goods1new HashMap(); goods1.put(name, 蘋果); goods1.put(price, 5.8); Map goods2new HashMap(); goods2.put(name, 香蕉); goods2.put(price, 2.5); Map goods3new HashMap(); goods3.put(name, 橘子); goods3.put(price, 3.2); goodsList.add(goods1); goodsList.add(goods2); goodsList.add(goods3); map.put(goodsList, goodsList);