十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
SpringBoot2中怎么使用FreeMarker模板完成頁面靜態(tài)化處理,針對這個問題,這篇文章詳細(xì)介紹了相對應(yīng)的分析和解答,希望可以幫助更多想解決這個問題的小伙伴找到更簡單易行的方法。
10年積累的成都網(wǎng)站設(shè)計(jì)、網(wǎng)站制作經(jīng)驗(yàn),可以快速應(yīng)對客戶對網(wǎng)站的新想法和需求。提供各種問題對應(yīng)的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡(luò)服務(wù)。我雖然不認(rèn)識你,你也不認(rèn)識我。但先網(wǎng)站設(shè)計(jì)后付款的網(wǎng)站建設(shè)流程,更有新泰免費(fèi)網(wǎng)站建設(shè)讓你可以放心的選擇與我們合作。
靜態(tài)頁面
即靜態(tài)網(wǎng)頁,指已經(jīng)裝載好內(nèi)容HTML頁面,無需經(jīng)過請求服務(wù)器數(shù)據(jù)和編譯過程,直接加載到客戶瀏覽器上顯示出來。通俗的說就是生成獨(dú)立的HTML頁面,且不與服務(wù)器進(jìn)行數(shù)據(jù)交互。
優(yōu)缺點(diǎn)描述:
靜態(tài)網(wǎng)頁的內(nèi)容穩(wěn)定,頁面加載速度極快;
不與服務(wù)器交互,提升安全性;
靜態(tài)網(wǎng)頁的交互性差,數(shù)據(jù)實(shí)時(shí)性很低;
維度成本高,生成很多HTML頁面;
動態(tài)頁面
指跟靜態(tài)網(wǎng)頁相對的一種網(wǎng)頁編程技術(shù),頁面的內(nèi)容需要請求服務(wù)器獲取,在不考慮緩存的情況下,服務(wù)接口的數(shù)據(jù)變化,頁面加載的內(nèi)容也會實(shí)時(shí)變化,顯示的內(nèi)容卻是隨著數(shù)據(jù)庫操作的結(jié)果而動態(tài)改變的。
優(yōu)缺點(diǎn)描述:
動態(tài)網(wǎng)頁的實(shí)時(shí)獲取數(shù)據(jù),延遲性低;
依賴數(shù)據(jù)庫交互,頁面維護(hù)成本很低;
與數(shù)據(jù)庫實(shí)時(shí)交互,安全控制的成本高;
頁面加載速度十分依賴數(shù)據(jù)庫和服務(wù)的性能;
動態(tài)頁面和靜態(tài)頁面有很強(qiáng)的相對性,對比之下也比較好理解。
動態(tài)頁面靜態(tài)化處理的應(yīng)用場景非常多,例如:
大型網(wǎng)站的頭部和底部,靜態(tài)化之后統(tǒng)一加載;
媒體網(wǎng)站,內(nèi)容經(jīng)過渲染,直接轉(zhuǎn)為HTML網(wǎng)頁;
高并發(fā)下,cdn邊緣節(jié)點(diǎn)代理的靜態(tài)網(wǎng)頁;
電商網(wǎng)站中,復(fù)雜的產(chǎn)品詳情頁處理;
靜態(tài)化技術(shù)的根本:提示服務(wù)的響應(yīng)速度,或者說使響應(yīng)節(jié)點(diǎn)提前,如一般的流程,頁面(客戶端)請求服務(wù),服務(wù)處理,響應(yīng)數(shù)據(jù),頁面裝載,一系列流程走下來不僅復(fù)雜,而且耗時(shí),如果基于靜態(tài)化技術(shù)處理之后,直接加載靜態(tài)頁面,好了請求結(jié)束。
靜態(tài)頁面轉(zhuǎn)換是一個相對復(fù)雜的過程,其中核心流程如下:
開發(fā)一個頁面模板,即靜態(tài)網(wǎng)頁樣式;
提供接口,給頁面模板獲取數(shù)據(jù);
頁面模板中編寫數(shù)據(jù)接口返參的解析流程;
基于解析引擎,把數(shù)據(jù)和頁面模板合并;
頁面模板內(nèi)容加載完成后轉(zhuǎn)換為HTML靜態(tài)頁面;
HTML靜態(tài)頁面上傳到文件服務(wù)器;
客戶端(Client)獲取靜態(tài)頁面的url加載顯示;
主流程大致如上,如果數(shù)據(jù)接口響應(yīng)參數(shù)有變,則需要重新生成靜態(tài)頁,所以在數(shù)據(jù)的加載實(shí)時(shí)性上面會低很多。
FreeMarker是一款模板引擎:即一種基于模板和要改變的數(shù)據(jù),并用來生成輸出文本(HTML網(wǎng)頁、電子郵件、配置文件、源代碼等)的通用工具。
org.springframework.boot spring-boot-starter-freemarker
這里既使用FreeMarker開發(fā)的模板樣式。
PageStatic 主題:${myTitle}
<#assign text="{'auth':'cicada','date':'2020-07-16'}" /> <#assign data=text?eval /> 作者:${data.auth} 日期:${data.date}
規(guī)格描述 | 產(chǎn)品詳情 |
---|---|
${info.desc} |
FreeMarker的語法和原有的HTML語法基本一致,但是具有一套自己的數(shù)據(jù)處理標(biāo)簽,用起來不算復(fù)雜。
通過解析,把頁面模板和數(shù)據(jù)接口的數(shù)據(jù)合并到一起即可。
@Service public class PageServiceImpl implements PageService { private static final Logger LOGGER = LoggerFactory.getLogger(PageServiceImpl.class) ; private static final String PATH = "/templates/" ; @Override public void ftlToHtml() throws Exception { // 創(chuàng)建配置類 Configuration configuration = new Configuration(Configuration.getVersion()); // 設(shè)置模板路徑 String classpath = this.getClass().getResource("/").getPath(); configuration.setDirectoryForTemplateLoading(new File(classpath + PATH)); // 加載模板 Template template = configuration.getTemplate("my-page.ftl"); // 數(shù)據(jù)模型 Mapmap = new HashMap<>(); map.put("myTitle", "頁面靜態(tài)化(PageStatic)"); map.put("tableList",getList()) ; map.put("imgList",getImgList()) ; // 靜態(tài)化頁面內(nèi)容 String content = FreeMarkerTemplateUtils.processTemplateIntoString(template, map); LOGGER.info("content:{}",content); InputStream inputStream = IOUtils.toInputStream(content,"UTF-8"); // 輸出文件 FileOutputStream fileOutputStream = new FileOutputStream(new File("F:/page/newPage.html")); IOUtils.copy(inputStream, fileOutputStream); // 關(guān)閉流 inputStream.close(); fileOutputStream.close(); } private List getList (){ List tableInfoList = new ArrayList<>() ; tableInfoList.add(new TableInfo(Constant.desc1, Constant.img01)); tableInfoList.add(new TableInfo(Constant.desc2,Constant.img02)); return tableInfoList ; } private List getImgList (){ List imgList = new ArrayList<>() ; imgList.add(Constant.img02) ; imgList.add(Constant.img02) ; return imgList ; } }
關(guān)于SpringBoot2中怎么使用FreeMarker模板完成頁面靜態(tài)化處理問題的解答就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,如果你還有很多疑惑沒有解開,可以關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道了解更多相關(guān)知識。