国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Spring Boot--Freemarker渲染技術(shù)+實際案例

這篇具有很好參考價值的文章主要介紹了Spring Boot--Freemarker渲染技術(shù)+實際案例。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

目錄

Freemarker

1.1.什么是Freemarker

1.2.Freemarker模板組成部分

1.3.優(yōu)點

FreeMarker常見的方法:

2.2.2.數(shù)值

2.2.3.布爾值

2.2.4.日期

2.3.常見指令

2.3.1.處理不存在的值

assign

2.3.4.list

2.3.5.include

SpringBoot整合Freemarker


Freemarker

1.1.什么是Freemarker

FreeMarker 是一款 模板引擎: 即一種基于模板和要改變的數(shù)據(jù), 并用來生成輸出文本(HTML網(wǎng)頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發(fā)產(chǎn)品的組件。

模板編寫為FreeMarker Template Language (FTL)。它是簡單的,專用的語言, 不是 像PHP那樣成熟的編程語言。 那就意味著要準備數(shù)據(jù)在真實編程語言中來顯示,比如數(shù)據(jù)庫查詢和業(yè)務(wù)運算, 之后模板顯示已經(jīng)準備好的數(shù)據(jù)。在模板中,你可以專注于如何展現(xiàn)數(shù)據(jù), 而在模板之外可以專注于要展示什么數(shù)據(jù)。

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

這種方式通常被稱為MVC (模型 視圖 控制器) 模式,對于動態(tài)網(wǎng)頁來說,是一種特別流行的模式。 它幫助從開發(fā)人員(Java 程序員)中分離出網(wǎng)頁設(shè)計師(HTML設(shè)計師)。設(shè)計師無需面對模板中的復雜邏輯, 在沒有程序員來修改或重新編譯代碼時,也可以修改頁面的樣式。

而FreeMarker最初的設(shè)計,是被用來在MVC模式的Web開發(fā)框架中生成HTML頁面的,它沒有被綁定到 Servlet或HTML或任意Web相關(guān)的東西上。它也可以用于非Web應(yīng)用環(huán)境中。

FreeMarker 是免費的, 基于Apache許可證2.0版本發(fā)布。

1.2.Freemarker模板組成部分

FreeMarker模板文件主要由如下4個部分組成:

  • 文本:直接輸出的部分

  • 注釋:使用<#-- ... -->格式做注釋,里面內(nèi)容不會輸出

  • 插值:即${...}或#{...}格式的部分,類似于占位符,將使用數(shù)據(jù)模型中的部分替代輸出

  • FTL指令:即FreeMarker指令,全稱是:FreeMarker Template Language,和HTML標記類似,但名字前加#予以區(qū)分,不會輸出

FreeMarker與Web容器無關(guān)

FreeMarker與Web容器無關(guān),即在Web運行時,它并不知道Servlet或HTTP,故此FreeMarker不僅可以用作表現(xiàn)層的實現(xiàn)技術(shù),而且還可以用于生成XML,JSP或Java等各種文本文件。

在Java Web領(lǐng)域,F(xiàn)reeMarker是應(yīng)用廣泛的模板引擎,主要用于MVC中的view層,生成html展示數(shù)據(jù)給客戶端,可以完全替代JSP。

總之,F(xiàn)reeMarker是一個模板引擎,一個基于模板生成文本輸出的通用工具,使用純Java編寫,模板中沒有業(yè)務(wù)邏輯,外部Java程序通過數(shù)據(jù)庫操作等生成數(shù)據(jù)傳入模板(template)中,然后輸出頁面。它能夠生成各種文本:HTML、XML、RTF、Java源代碼等等,而且不需要Servlet環(huán)境,并且可以從任何源載入模板,如本地文件、數(shù)據(jù)庫等等。

1.3.優(yōu)點

FreeMarker的誕生是為了取代JSP。雖然JSP功能強大,可以寫Java代碼實現(xiàn)復雜的邏輯處理,但是頁面會有大量業(yè)務(wù)邏輯,不利于維護和閱讀,更不利于前后臺分工,容易破壞MVC結(jié)構(gòu),所以舍棄JSP,選擇使用FreeMarker是大勢所趨。當前很多企業(yè)使用FreeMarker取代JSP,F(xiàn)reeMarker有眾多的優(yōu)點,如下所示:

  • 很好地分離表現(xiàn)層和業(yè)務(wù)邏輯

JSP功能很強大,它可以在前臺編寫業(yè)務(wù)邏輯代碼,但這也帶來了一個很大的弊端——頁面內(nèi)容雜亂,可讀性差,這將會大大增加后期的維護難度。而FreeMarker職責明確,功能專注,僅僅負責頁面的展示,從而去掉了繁瑣的邏輯代碼。FreeMarker的原理就是:模板+數(shù)據(jù)模型=輸出,模板只負責數(shù)據(jù)在頁面中的表現(xiàn),不涉及任何的邏輯代碼,而所有的邏輯都是由數(shù)據(jù)模型來處理的。用戶最終看到的輸出是模板和數(shù)據(jù)模型合并后創(chuàng)建的。

  • 提高開發(fā)效率

眾所周知,JSP在第一次執(zhí)行的時候需要轉(zhuǎn)換成Servlet類,之后的每次修改都要編譯和轉(zhuǎn)換。這樣就造成了每次修改都需要等待編譯的時間,效率低下。而FreeMarker模板技術(shù)并不存在編譯和轉(zhuǎn)換的問題,所以就不會存在上述問題。相比而言,使用FreeMarker可以提高一定的開發(fā)效率。

  • 明確分工

JSP頁面前后端的代碼寫到了一起,耦合度很高,前端開發(fā)需要熟悉后臺環(huán)境,需要去調(diào)試,而后臺開發(fā)人員需要去做不熟悉的前端界面設(shè)計。對兩者而言,交替性的工作需要花費一定的學習成本,效率低下。而使用FreeMarker后,前后端完全分離,大家各干各的,互不影響。

  • 簡單易用,功能強大

FreeMarker支持JSP標簽,宏定義比JSP Tag方便,同時內(nèi)置了大量常用功能,比如html過濾,日期金額格式化等等。FreeMarker代碼十分簡潔,上手快,使用非常方便。

FreeMarker常見的方法:

字符串類型處理:

方法 含義
?substring(start,end) 截取字符串(左閉右開)
?uncap_first 首字母小寫輸出
?cap_first 首字母大寫輸出
?lower_case 字母轉(zhuǎn)小寫輸出
?upper_case 字母轉(zhuǎn)大寫輸出
?length 獲取字符串長度
?starts_with("xx")?string 是否以指定字符開頭(boolean類型)
?ends_with("xx")?string 是否以指定字符結(jié)尾(boolean類型)
?index_of("xx") 獲取指定字符的索引
?trim 去除字符串前后空格
?replace("xx","xx") 替換指定字符串

字符串空值情況處理:

FreeMarker 的變量必須賦值,否則就會拋出異常。而對于 FreeMarker 來說,null 值和不存在的變量是完全一樣的,因為 FreeMarker 無法理解 null 值。

<#-- 如果值不存在,直接輸出會報錯 -->
<#--${str}-->
<#-- 使用!,當值不存在時,默認顯示空字符串 -->
${str!}<br>
<#-- 使用!"xx",當值不存在時,默認顯示指定字符串 -->
${str!"這是一個默認值"}<br>
<#-- 使用??,判斷字符串是否為空;返回布爾類型。如果想要輸出,需要將布爾類型轉(zhuǎn)換成字符串 -->
${(str??)?string}<br>

2.2.2.數(shù)值

輸入不帶引號的數(shù)字就可以直接指定一個數(shù)字, 必須使用點作為小數(shù)的分隔符而不能是其他的分組分隔符。

${0.45}<br>
${18}<br>
<#-- 將數(shù)值轉(zhuǎn)換成字符串輸出 -->
${1000?c} <br>
<#-- 將數(shù)值轉(zhuǎn)換成貨幣類型的字符串輸出 -->
${1000?string.currency} <br>
<#-- 將數(shù)值轉(zhuǎn)換成百分比類型的字符串輸出 -->
${0.45?string.percent} <br>
<#-- 將浮點型數(shù)值保留指定小數(shù)位輸出 (##表示保留兩位小數(shù)) -->
${0.45723123?string["0.##"]} <br>

2.2.3.布爾值

直接寫 true 或者 false 就表示一個布爾值了,不需使用引號。

在freemarker中布爾類型不能直接輸出;如果輸出要先轉(zhuǎn)成字符串

${flag?c}<br>
${flag?string}<br>
${flag?string("yes","no")}<br>

2.2.4.日期

日期變量可以存儲和日期/時間相關(guān)的數(shù)據(jù)。

在freemarker中日期類型不能直接輸出;如果輸出要先轉(zhuǎn)成日期型或字符串

日期格式輸出:

輸出方式 說明
?date 年月日
?time 時分秒
?datetime 年月日時分秒
?string("自定義格式") 指定格式
<#-- 輸出日期格式 -->
${createDate?date} <br>
<#-- 輸出時間格式 -->
${createDate?time} <br>
<#-- 輸出日期時間格式 -->
${createDate?datetime} <br>
<#-- 輸出格式化日期格式 -->
${createDate?string("yyyy年MM月dd日 HH時mm分ss秒")} <br>

2.3.常見指令

2.3.1.處理不存在的值

當試圖訪問一個不存在的變量時, FreeMarker 將會報錯而導致模板執(zhí)行中斷。 通常我們可以使用兩個特殊操作符來壓制這個錯誤,控制這種錯誤情況。被控制的變量可以是頂層變量,哈希表或序列的子變量。 此外這些操作符還能處理方法調(diào)用的返回值不存在的情況。

  • 默認值操作符

使用形式: unsafe_expr!default_exprunsafe_expr! or (unsafe_expr)!default_expr(unsafe_expr)!

這個操作符允許你為可能不存在的變量指定一個默認值。

${message!"default Value."}
<#assign message="Zking">
${message!"default Value."}

輸出結(jié)果如下:

default Value.
Zking

如果默認值被省略了,那么結(jié)果將會是空串,空序列或空哈希表。(這是 FreeMarker 允許多類型值的體現(xiàn))請注意,如果想讓默認值為 0false,則不能省略它。

(${message!})
<#assign message = "Zking">
(${message!})
  • 不存在值檢測操作符

使用形式: unsafe_expr??(unsafe_expr)??

這個操作符告訴我們一個值是否存在?;谶@種情況, 結(jié)果是 truefalse

<#if name??>
  存在
<#else>
  不存在
</#if>

assign

使用該指令你可以創(chuàng)建一個新的變量, 或者替換一個已經(jīng)存在的變量。語法格式如下:

<#assign name1=value1 name2=value2 ... nameN=valueN>
或
<#assign name>
  capture this
</#assign>

案例演示:

<#-- 創(chuàng)建一個str的變量 -->
<#assign str="hello">
<#-- 輸出str -->
${str} <br>
<#-- 一次創(chuàng)建多個變量 -->
<#assign num=1 names=["zhangsan","lisi","wangwu"] >
${num} -- ${names?join(",")}

如本次 使用的ctx:

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

獲取到了yml中的

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

2.3.4.list

list 指令執(zhí)行在 list 開始標簽和 list 結(jié)束標簽 ( list 中間的部分) 之間的代碼, 對于在序列(或集合)中每個值指定為它的第一個參數(shù)。 對于每次迭代,循環(huán)變量將會存儲當前項的值。

循環(huán)變量僅僅存在于 list 標簽體內(nèi)。 而且從循環(huán)中調(diào)用的宏/函數(shù)不會看到它(就像它只是局部變量一樣)。

<#list sequence as item>
 ?  Part repeated for each item
<#else>
 ?  Part executed when there are 0 items
</#list>

list 中的 else 僅從 FreeMarker 2.3.23 版本開始支持。

注意:

  • else 部分是可選的, 而且僅僅從 FreeMarker 2.3.23 版本開始支持。

  • sequence: 將我們想要迭代的項,算作是序列或集合的表達式

  • item: 循環(huán)變量的名稱 (不是表達式)

<#list arrs as item>
 ?  ${item}
<#else>
 ?  集合是空的
</#list>

2.3.5.include

可以使用它在你的模板中插入另外一個 FreeMarker 模板文件 (由 path 參數(shù)指定)

<#include path>
或
<#include path options>

這里:

  • path: 要包含文件的路徑;

  • options: 一個或多個這樣的選項: encoding=encoding, parse=parse

    • encoding: 算作是字符串的表達式

    • parse: 算作是布爾值的表達式(為了向下兼容,也接受一部分字符串值)

    • ignore_missing: 算作是布爾值的表達式

<h1>Hello Freemarker</h1>
<#include "/common/head.ftl">

SpringBoot整合Freemarker

?2.1.配置

配置pom.xml,引入依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-freemarker</artifactId>
</dependency>

application.ym添加:

  freemarker:
    # 設(shè)置模板后綴名
    suffix: .ftl
    # 設(shè)置文檔類型
    content-type: text/html
    # 設(shè)置頁面編碼格式
    charset: UTF-8
    # 設(shè)置頁面緩存
    cache: false
    # 設(shè)置ftl文件路徑
    template-loader-path: classpath:/templates
      # 設(shè)置靜態(tài)文件路徑,js,css等
    mvc:
      static-path-pattern: /static/**

配置Springboot自帶的頁面:

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java

建立一個templates專門存放ftl文件

index.ftl

<!doctype html>
<html lang="zh">
<head>
    <title>Document</title>
    <style>
        td {
            padding: 20px;
            text-align: center;
        }
        tr{
            margin-bottom: 30px;
        }
    </style>
    <#include "common.ftl">
</head>
<body>
<#if books??>
    <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal">
        新增
    </button>
    <table class="table table-striped">
        <#list books as book>
            <tr>
                <td>${book.id}</td>
                <td>${book.bookname}</td>
                <td>${book.price}</td>
                <td>${book.booktype}</td>
                <td>
                    <a href="${ctx}/del?id=${book.id}" class="btn btn-danger">刪除</a>
                </td>
                <td>
                    <a href="${ctx}/edt?id=${book.id}" class="btn btn-outline-success">修改</a>
                </td>
            </tr>
        </#list>
    </table>


    <!-- 新增 -->
    <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true">
        <div class="modal-dialog">
            <div class="modal-content">
                <div class="modal-header">
                    <h5 class="modal-title" id="exampleModalLabel">新增</h5>
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                        <span aria-hidden="true">&times;</span>
                    </button>
                </div>
                <div class="modal-body">
                    ...
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
                    <button type="button" class="btn btn-primary">Save changes</button>
                </div>
            </div>
        </div>
    </div>
</#if>
</body>
</html>

common.ftl

<#assign ctx="${springMacroRequestContext.contextPath}">
<link rel="stylesheet" href="${ctx}/bootstrap-3.4.1-dist/css/bootstrap.css">
<script src="${ctx}/jquery-3.6.1.js"></script>
<script src="${ctx}/bootstrap-3.4.1-dist/js/bootstrap.js"></script>

這個文件定義了公共的資源

ctx代表/static/

Spring Boot--Freemarker渲染技術(shù)+實際案例,spring boot,后端,java文章來源地址http://www.zghlxwxcb.cn/news/detail-770620.html

到了這里,關(guān)于Spring Boot--Freemarker渲染技術(shù)+實際案例的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Spring Boot 中使用 Poi-tl 渲染數(shù)據(jù)并生成 Word 文檔

    本文 Demo 已收錄到 demo-for-all-in-java 項目中,歡迎大家 star 支持!后續(xù)將持續(xù)更新! 產(chǎn)品經(jīng)理急沖沖地走了過來?!脯F(xiàn)在需要將按這些數(shù)據(jù)生成一個 Word 報告文檔,你來安排下」 項目中有這么一個需求,需要將用戶填寫的數(shù)據(jù)填充到一個 Word 文檔中,而這個 Word 文檔是人家給

    2024年02月09日
    瀏覽(23)
  • 【微服務(wù)】Spring Boot集成ELK實用案例

    【微服務(wù)】Spring Boot集成ELK實用案例

    推薦一款我一直在用國內(nèi)很火的 AI網(wǎng)站 ,包含 GPT3.5/4.0、文心一言、通義千問、智譜AI等多個AI模型 ,支持PC、APP、VScode插件同步使用,點擊鏈接跳轉(zhuǎn)-ChatGPT4.0中文版 在現(xiàn)代軟件開發(fā)中,微服務(wù)架構(gòu)已成為一種流行趨勢。隨之而來的挑戰(zhàn)之一是如何有效地管理和分析分布在各個

    2024年02月20日
    瀏覽(20)
  • Spring Boot 3核心技術(shù)與最佳實踐

    Spring Boot 3核心技術(shù)與最佳實踐

    ?? 個人網(wǎng)站:【 海擁】【神級代碼資源網(wǎng)站】【辦公神器】 ?? 基于Web端打造的:??輕量化工具創(chuàng)作平臺 ?? 想尋找共同學習交流的小伙伴,請點擊【全棧技術(shù)交流群】 Spring Boot作為一個輕量級的Java開發(fā)框架,旨在簡化Spring應(yīng)用程序的搭建和開發(fā)過程。隨著Spring Boot 3的發(fā)布

    2024年03月10日
    瀏覽(24)
  • 【SpringBoot系列】Spring Boot Bean Factory的生命周期 Spring Boot學習大綱,可以留言自己想了解的技術(shù)點

    繼續(xù)完成既定的任務(wù),走起 可以概括為以下步驟: 資源加載:Spring Boot 應(yīng)用程序啟動時,會掃描指定的路徑,加載配置文件和類文件等資源。 配置加載:Spring Boot 會根據(jù)配置文件(比如 application.properties)中的配置,創(chuàng)建一個 Environment 對象,用于保存應(yīng)用程序的配置信息。

    2024年02月05日
    瀏覽(35)
  • Spring Boot實現(xiàn)統(tǒng)一異常處理的技術(shù)解析

    Spring Boot實現(xiàn)統(tǒng)一異常處理的技術(shù)解析

    引言 在軟件開發(fā)過程中,異常處理是非常重要的一環(huán)。一個好的異常處理機制可以幫助我們更好地定位問題,提高代碼的可維護性和穩(wěn)定性。Spring Boot作為一款輕量級的Java開發(fā)框架,提供了一種簡單而高效的方式來實現(xiàn)統(tǒng)一異常處理。本文將詳細介紹如何使用Spring Boot實現(xiàn)統(tǒng)

    2024年01月21日
    瀏覽(29)
  • 解決Spring Boot啟動錯誤的技術(shù)指南

    解決Spring Boot啟動錯誤的技術(shù)指南

    ???? 博主貓頭虎(????)帶您 Go to New World??? ?? 博客首頁 ——????貓頭虎的博客?? ?? 《面試題大全專欄》 ?? 文章圖文并茂??生動形象??簡單易學!歡迎大家來踩踩~?? ?? 《IDEA開發(fā)秘籍專欄》 ?? 學會IDEA常用操作,工作效率翻倍~?? ?? 《100天精通Golang(基礎(chǔ)

    2024年02月09日
    瀏覽(27)
  • Spring Boot 3.x 系列【34】Actuator入門案例及端點配置

    有道無術(shù),術(shù)尚可求,有術(shù)無道,止于術(shù)。 本系列Spring Boot版本3.0.5 源碼地址:https://gitee.com/pearl-organization/study-spring-boot3 在生產(chǎn)環(huán)境很有必要對應(yīng)用進行 監(jiān)控、追蹤、審計、控制 ,假如數(shù)據(jù)庫突然掛了,直到客戶打電話罵娘時~ 我們才知道這回事,就很尷尬了?????? Sp

    2024年02月05日
    瀏覽(23)
  • SSMP整合案例(2) Spring Boot整合Lombok簡化實體類開發(fā)

    SSMP整合案例(2) Spring Boot整合Lombok簡化實體類開發(fā)

    好啊 接著我們上文SSMP整合案例(1) 構(gòu)建 Spring Boot Vue MySql項目環(huán)境 我們繼續(xù) 接下來 我們要在java項目中 建立出數(shù)據(jù)庫表對應(yīng)的實體類 我們還是先看看自己上文中 創(chuàng)建的這個 book表 其中四個字段 主鍵id 數(shù)字枚舉類型的type 字符串類型name 字符串類型 description 我們打開idea 找到上

    2024年02月09日
    瀏覽(21)
  • 使用Spring Boot集成中間件:Kafka的高級使用案例講解

    在實際應(yīng)用中,Kafka作為一種強大的分布式消息系統(tǒng),廣泛應(yīng)用于實時數(shù)據(jù)處理和消息傳遞。本文將通過一個全面的使用案例,詳細介紹如何使用Spring Boot集成Kafka,并展示其在實際場景中的應(yīng)用。 在開始之前,我們需要確保已經(jīng)完成以下準備工作: 安裝并啟動Kafka集群 創(chuàng)建

    2024年02月01日
    瀏覽(19)
  • 【項目實戰(zhàn)】一、Spring boot整合JWT、Vue案例展示用戶鑒權(quán)

    【項目實戰(zhàn)】Spring boot整合JWT、Vue案例展示用戶鑒權(quán) 【微服務(wù)實戰(zhàn)】JWT

    2024年02月09日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包