首頁 >Java >java教程 >SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理

SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理

WBOY
WBOY轉載
2023-05-15 20:49:04966瀏覽

一、頁面靜態化

1、動靜態頁面

靜態頁面

即靜態網頁,指已經裝載好內容HTML頁面,無需經過請求伺服器資料和編譯過程,直接載入到客戶瀏覽器上顯示出來。通俗的說就是產生獨立的HTML頁面,且不與伺服器進行資料互動。

優缺點描述:

  • 靜態網頁的內容穩定,頁面載入速度極快;

  • 不與伺服器交互,提升安全性;

  • 靜態網頁的互動性差,資料即時性很低;

  • 維度成本高,產生很多HTML頁面;

動態頁面

指跟靜態網頁相對的一種網頁程式設計技術,頁面的內容需要請求伺服器獲取,在不考慮緩存的情況下,服務介面的資料變化,頁面載入的內容也會即時變化,顯示的內容卻是隨著資料庫操作的結果而動態改變的。

優缺點描述:

  • 動態網頁的即時獲取數據,延遲性低;

  • 依賴資料庫交互,頁面維護成本很低;

  • 與資料庫即時交互,安全控制的成本高;

  • 頁面載入速度十分依賴資料庫和服務的效能;

動態頁面和靜態頁面有很強的相對性,對比之下也比較好理解。

2、應用程式場景

動態頁面靜態化處理的應用程式場景非常多,例如:

  • 大型網站的頭部和底部,靜態化之後統一載入;

  • 媒體網站,內容經過渲染,直接轉為HTML網頁;

  • 高並發下,CDN邊緣節點代理的靜態網頁;

  • 電商網站中,複雜的產品詳情頁處理;

靜態化技術的根本:提示服務的回應速度,或者說使響應節點提前,如一般的流程,頁面(客戶端)請求服務,服務處理,響應數據,頁面裝載,一系列流程走下來不僅複雜,而且耗時,如果基於靜態化技術處理之後,直接載入靜態頁面,好了請求結束。

二、流程分析

靜態頁面轉換是一個相對複雜的過程,其中核心流程如下:

SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理

  • 開發一個頁面模板,即靜態網頁樣式;

  • 提供接口,給頁面模板獲取數據;

  • 頁面模板中編寫數據介面返參的解析流程;

  • 基於解析引擎,把資料和頁面範本合併;

  • ##頁面範本內容載入完成後轉換為HTML靜態頁面;

  • HTML靜態頁面上傳到檔案伺服器;

  • #客戶端(Client)取得靜態頁面的url載入顯示;

主流程大致如上,如果資料介面回應參數有變,則需要重新產生靜態頁,所以在資料的載入即時性上面會低很多。

三、程式碼實作案例

1、基礎依賴

FreeMarker是一款範本引擎:即一種基於範本和要改變的數據,並用來產生輸出文本(HTML網頁、電子郵件、設定檔、原始碼等)的通用工具。

<dependency>
    <groupid>org.springframework.boot</groupid>
    <artifactid>spring-boot-starter-freemarker</artifactid>
</dependency>
2、頁面範本

這裡既使用FreeMarker開發的範本樣式。


    <title>PageStatic</title>


主题:${myTitle}<br>


作者:${data.auth} 日期:${data.date}<br>
                                                                                                                                      #list>     
规格描述产品详情
${info.desc}SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理

    SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理 #list> FreeMarker的語法和原有的HTML語法基本上一致,但是有一套自己的資料處理標籤,用起來不算複雜。

3、解析過程

透過解析,把頁面模板和資料介面的資料合併在一起即可。

@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 {
        // 创建配置类
        Configuration configuration = new Configuration(Configuration.getVersion());
        // 设置模板路径
        String classpath = this.getClass().getResource("/").getPath();
        configuration.setDirectoryForTemplateLoading(new File(classpath + PATH));
        // 加载模板
        Template template = configuration.getTemplate("my-page.ftl");
        // 数据模型
        Map<string> map = new HashMap();
        map.put("myTitle", "页面静态化(PageStatic)");
        map.put("tableList",getList()) ;
        map.put("imgList",getImgList()) ;
        // 静态化页面内容
        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);
        // 关闭流
        inputStream.close();
        fileOutputStream.close();
    }
    private List<tableinfo> getList (){
        List<tableinfo> tableInfoList = new ArrayList() ;
        tableInfoList.add(new TableInfo(Constant.desc1, Constant.img01));
        tableInfoList.add(new TableInfo(Constant.desc2,Constant.img02));
        return tableInfoList ;
    }
    private List<string> getImgList (){
        List<string> imgList = new ArrayList() ;
        imgList.add(Constant.img02) ;
        imgList.add(Constant.img02) ;
        return imgList ;
    }
}</string></string></tableinfo></tableinfo></string>

以上是SpringBoot2中如何使用FreeMarker範本完成頁面靜態化處理的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除