【工具类】页面静态化 --- Freemarker的使用
生活随笔
收集整理的這篇文章主要介紹了
【工具类】页面静态化 --- Freemarker的使用
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
介紹
FreeMarker 是一個用 Java 語言編寫的模板引擎,它基于模板來生成文本輸出。FreeMarker與 Web 容器無關(guān),即在 Web 運行時,它并不知道 Servlet 或 HTTP。它不僅可以用作表現(xiàn)層的實現(xiàn)技術(shù),而且還可以用于生成 XML,JSP 或 Java 等。
頁面靜態(tài)化
把一個動態(tài)頁面(使用Ajax去服務(wù)器請求數(shù)據(jù))給靜態(tài)化保存到服務(wù)器,讓用戶直接請求這個靜態(tài)頁面
好處:用戶方法某個頁面的時候不用再去后臺請求,也不用在去數(shù)據(jù)庫請求,減少后臺服務(wù)器和數(shù)據(jù)庫服務(wù)器的壓力
問題:
- 什么時候生成靜態(tài)頁面比較合適
- 可以對訪問量比較大的一些頁面,這些頁面不經(jīng)常發(fā)生變化,而且這些頁面應(yīng)該是展示數(shù)據(jù)使用的
- 可以在程序啟動完成后去緩存這個頁面,然后在數(shù)據(jù)進行增刪改的時候去修改緩存
- 將靜態(tài)頁面生成到什么位置
- 生成在項目存放頁面的地方,上線的應(yīng)該存放在tomcat容器中,Nginx本身就是一個靜態(tài)資源服務(wù)器,也可以存放在Nginx服務(wù)器中
- 應(yīng)該生成幾個靜態(tài)頁面
- 根據(jù)項目情況,個人看著辦
模板文件
模板文件中有四種元素:
1、文本,直接輸出的部分
2、注釋,即<#–…-->格式不會輸出
3、插值(Interpolation):即${…}部分,將使用數(shù)據(jù)模型中的部分替代輸出
4、FTL指令:FreeMarker指令,和HTML標(biāo)記類似,名字前加#予以區(qū)分,不會輸出
Freemarker的模板文件后綴可以任意,一般建議為ftl。
java代碼基本演示
public class FreeMarkerTest {public static void main(String[] args) throws Exception{//1.創(chuàng)建 Freemarker 的配置類對象Configuration configuration=new Configuration(Configuration.getVersion());//2.設(shè)置模板所在的目錄configuration.setDirectoryForTemplateLoading(new File("E:\\ftl"));//3.設(shè)置字符集configuration.setDefaultEncoding("utf-8");//4.加載模板Template template = configuration.getTemplate("test.ftl");//5.創(chuàng)建數(shù)據(jù)模型Map map=new HashMap();map.put("name", "趙麗穎");map.put("message", "你好啊");map.put("success", false);List goodsList=new ArrayList();Map goods1=new HashMap();goods1.put("name", "蘋果");goods1.put("price", 5.8);Map goods2=new HashMap();goods2.put("name", "香蕉");goods2.put("price", 2.5);Map goods3=new HashMap();goods3.put("name", "橘子");goods3.put("price", 3.2);goodsList.add(goods1);goodsList.add(goods2);goodsList.add(goods3);map.put("goodsList", goodsList);//6.創(chuàng)建Writer對象Writer out =new FileWriter(new File("E:\\ftl\\test.html"));//7.輸出template.process(map, out);//8.關(guān)閉Writer對象out.close();} }模板文件
<html> <head><meta charset="utf-8"> <title>Freemarker入門</title></head> <body><!--我只是一個注釋,我不會有任何輸出 --> <!--${插值表達式} 在模板文件中使用最多的,模板想要填充數(shù)據(jù),就必須使用${} 來進行占位${} 中的值 必須和模型中的Map中的Key或者Bean對象中的屬性名稱保持一致<#assign 變量名=""> 是在模型中聲明一個變量,聲明的變量可以直接在插值表達式中使用如果模板中聲明的變量和數(shù)據(jù)模型中聲明的變量沖突了,freemrarker會使用模板中聲明的這個變量書寫freemarker模板文件的一些規(guī)則:和html xml很像標(biāo)簽正常關(guān)閉,自閉和 圍堵標(biāo)簽標(biāo)簽必須正常嵌套,不能出現(xiàn)交叉嵌套標(biāo)簽名稱嚴格區(qū)分大小寫< </ 和指令之間不能加空白字符--> ${name}你好,${message} <br><#assign linkman="周先生"> 聯(lián)系人:${linkman}<br><!-- map 集合使用<#assign> 聲明map集合的時候注意 , key必須帶引號--><#assign info={"mobile":"13333333333",'address':'北京市昌平區(qū)'} > 電話:${info.mobile} 地址:${info.address}<br><!-- include 指令可以被多層嵌套包含,但是注意不要寫成死循環(huán)--><#include "head.ftl"/><br><!-- if 指令必須有閉合這個指令的條件可以是一個結(jié)果為Boolean類型的表達式--><#if success=true> 你已通過實名認證 <#else> 你未通過實名認證 </#if><br><!-- mapgoodsList 數(shù)據(jù)模型中的名稱as 關(guān)鍵字goods 每次遍歷出來的臨時變量,任意名稱--><#list goodsList as goods> 商品名稱: ${goods.name} 價格:${goods.price}<br> </#list><br><br></body> </html>Spring框架中使用Freemarker生成靜態(tài)頁面
pom.xml文件導(dǎo)入
<dependency><groupId>org.freemarker</groupId><artifactId>freemarker</artifactId><version>2.3.23</version></dependency>Spring配置文件中配置
<bean id="freemarkerConfig" class="org.springframework.web.servlet.view.freemarker.FreeMarkerConfigurer"><!--指定模板文件所在目錄--><property name="templateLoaderPath" value="/WEB-INF/ftl/" /><!--指定字符集--><property name="defaultEncoding" value="UTF-8" /></bean><!-- 加載屬性文件,文件中可以指定相關(guān)路徑,可以不配置--><context:property-placeholder location="classpath:freemarker.properties"/>通用方法用于生成靜態(tài)頁面
/** 第一個參數(shù),模板名稱,會結(jié)合Spring配置的路徑去查找模板文件* 第二個參數(shù),生成的靜態(tài)頁面名稱* Map:模板所需的數(shù)據(jù)*/public void generateHtml(String templateName, String htmlPageName, Map map){// 獲得配置對象Configuration configuration = freeMarkerConfigurer.getConfiguration();Writer out = null;try {// 加載模板Template template = configuration.getTemplate(templateName);// 構(gòu)造輸出流,outPutPath 變量:文件路徑// 指定輸出的靜態(tài)頁面放在哪里out = new FileWriter(new File(outPutPath + htmlPageName));// 輸出文件template.process(map,out);out.close();} catch (Exception e) {e.printStackTrace();}}總結(jié)
以上是生活随笔為你收集整理的【工具类】页面静态化 --- Freemarker的使用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【小游戏】Random实现猜数字小游戏
- 下一篇: 【SSM框架系列】SpringMVC基本