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

Springboot集成Freemarker|超級詳細,建議收藏

這篇具有很好參考價值的文章主要介紹了Springboot集成Freemarker|超級詳細,建議收藏。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、前言??

上一期,我是帶著大家入門了SpringBoot集成Kafka,今天我再來一期Freemarker的零基礎(chǔ)教學吧。不知道大家對kafka有多少了解,反正我就是從搭建開始,然后再加一個簡單演示,這就算是帶著大家了個門哈,剩下的我再后邊慢慢出教程給大家說。

二、環(huán)境說明??

演示環(huán)境:idea2021 + springboot 2.3.1REALSE + Freemarker

三、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ù)。 

springboot集成freemarker,Java,spring boot,java,后端
常用的java模板引擎還有哪些?

Jsp、Freemarker、Thymeleaf 、Velocity 等。

1.Jsp 為 Servlet 專用,不能單獨進行使用。

2.Thymeleaf 為新技術(shù),功能較為強大,但是執(zhí)行的效率比較低。

3.Velocity從2010年更新完 2.0 版本后,便沒有在更新。Spring Boot 官方在 1.4 版本后對此也不在支持,雖然 Velocity 在 2017 年版本得到迭代,但為時已晚。

四、環(huán)境搭建&&快速入門??

freemarker作為springmvc一種視圖格式,默認情況下SpringMVC支持freemarker視圖格式。
需要創(chuàng)建Spring Boot+Freemarker工程用于測試模板。

4.1 創(chuàng)建測試工程

創(chuàng)建一個freemarker-demo 的測試工程專門用于freemarker的功能測試與模板的測試。
pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>suihao-test</artifactId>
        <groupId>com.suihao</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>freemarker-demo</artifactId>

    <properties>
        <maven.compiler.source>8</maven.compiler.source>
        <maven.compiler.target>8</maven.compiler.target>
    </properties>

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

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>
        <!-- lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>

        <!-- apache 對 java io 的封裝工具庫 -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-io</artifactId>
            <version>1.3.2</version>
        </dependency>
    </dependencies>

</project>

4.2 配置文件

配置application.yml

server:
  port: 8881 #服務(wù)端口
spring:
  application:
    name: freemarker-demo #指定服務(wù)名
  freemarker:
    cache: false  #關(guān)閉模板緩存,方便測試
    settings:
      template_update_delay: 0 #檢查模板更新延遲時間,設(shè)置為0表示立即檢查,如果時間大于0會有緩存不方便進行模板測試
    suffix: .ftl               #指定Freemarker模板文件的后綴名

4.3 創(chuàng)建模型類

在freemarker的測試工程下創(chuàng)建模型類型用于測試

package com.suihao.freemarker.entity;

import lombok.Data;

import java.util.Date;

@Data
public class Student {
    private String name;//姓名
    private int age;//年齡
    private Date birthday;//生日
    private Float money;//錢包
}

4.4 創(chuàng)建模板

resources下創(chuàng)建templates,此目錄為freemarker的默認模板存放目錄。

在templates下創(chuàng)建模板文件 01-basic.ftl ,模板中的插值表達式最終會被freemarker替換成具體的數(shù)據(jù)。

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World!</title>
</head>
<body>
<b>普通文本 String 展示:</b><br><br>
Hello ${name} <br>
<hr>
<b>對象Student中的數(shù)據(jù)展示:</b><br/>
姓名:${stu.name}<br/>
年齡:${stu.age}
<hr>
</body>
</html>

4.5 創(chuàng)建controller

創(chuàng)建Controller類,向Map中添加name,最后返回模板文件。

package com.xuecheng.test.freemarker.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.client.RestTemplate;

import java.util.Map;

@Controller
public class HelloController {

    @GetMapping("/basic")
    public String test(Model model) {


        //1.純文本形式的參數(shù)
        model.addAttribute("name", "freemarker");
        //2.實體類相關(guān)的參數(shù)
        
        Student student = new Student();
        student.setName("小明");
        student.setAge(18);
        model.addAttribute("stu", student);

        return "01-basic";
    }
}

4.6 創(chuàng)建啟動類

package com.suihao.freemarker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class FreemarkerDemotApplication {
    public static void main(String[] args) {
        SpringApplication.run(FreemarkerDemotApplication.class,args);
    }
}

4.7 測試

請求:http://localhost:8881/basic
springboot集成freemarker,Java,spring boot,java,后端

五、Freemarker 基礎(chǔ)??

基礎(chǔ)語法種類

1、注釋,即<#-- -->,介于其之間的內(nèi)容會被freemarker忽略

<#--我是一個freemarker注釋-->

2、插值(Interpolation): 即 ${…} 部分,freemarker會用真實的值代替 ${…}

Hello ${name}

3、FTL指令:和HTML標記類似,名字前加#予以區(qū)分,F(xiàn)reemarker會解析標簽中的表達式或邏輯。

<# >FTL指令</#> 

4、文本,僅文本信息,這些不是freemarker的注釋、插值、FTL指令的內(nèi)容會被freemarker忽略解析,直接輸出內(nèi)容。

<#--freemarker中的普通文本-->
我是一個普通的文本
集合指令(List和Map)

1、數(shù)據(jù)模型:

在HelloController中新增如下方法:

@GetMapping("/list")
public String list(Model model){

    //------------------------------------
    Student stu1 = new Student();
    stu1.setName("小強");
    stu1.setAge(18);
    stu1.setMoney(1000.86f);
    stu1.setBirthday(new Date());

    //小紅對象模型數(shù)據(jù)
    Student stu2 = new Student();
    stu2.setName("小紅");
    stu2.setMoney(200.1f);
    stu2.setAge(19);

    //將兩個對象模型數(shù)據(jù)存放到List集合中
    List<Student> stus = new ArrayList<>();
    stus.add(stu1);
    stus.add(stu2);

    //向model中存放List集合數(shù)據(jù)
    model.addAttribute("stus",stus);

    //------------------------------------

    //創(chuàng)建Map數(shù)據(jù)
    HashMap<String,Student> stuMap = new HashMap<>();
    stuMap.put("stu1",stu1);
    stuMap.put("stu2",stu2);
    // 3.1 向model中存放Map數(shù)據(jù)
    model.addAttribute("stuMap", stuMap);

    return "02-list";
}

2、模板:

在templates中新增02-list.ftl文件

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World!</title>
</head>
<body>
    
<#-- list 數(shù)據(jù)的展示 -->
<b>展示list中的stu數(shù)據(jù):</b>
<br>
<br>
<table>
    <tr>
        <td>序號</td>
        <td>姓名</td>
        <td>年齡</td>
        <td>錢包</td>
    </tr>
</table>
<hr>
    
<#-- Map 數(shù)據(jù)的展示 -->
<b>map數(shù)據(jù)的展示:</b>
<br/><br/>
<a href="###">方式一:通過map['keyname'].property</a><br/>
輸出stu1的學生信息:<br/>
姓名:<br/>
年齡:<br/>
<br/>
<a href="###">方式二:通過map.keyname.property</a><br/>
輸出stu2的學生信息:<br/>
姓名:<br/>
年齡:<br/>

<br/>
<a href="###">遍歷map中兩個學生信息:</a><br/>
<table>
    <tr>
        <td>序號</td>
        <td>姓名</td>
        <td>年齡</td>
        <td>錢包</td> 
    </tr>
</table>
<hr>
 
</body>
</html>

??上面代碼解釋:

${k_index}:

index:得到循環(huán)的下標,使用方法是在stu后邊加"_index",它的值是從0開始
if指令
 if 指令即判斷指令,是常用的FTL指令,freemarker在解析時遇到if會進行判斷,條件為真則輸出if中間的內(nèi)容,否則跳過內(nèi)容不再輸出。
  • 指令格式
<#if ></if>

1、數(shù)據(jù)模型:

使用list指令中測試數(shù)據(jù)模型,判斷名稱為小紅的數(shù)據(jù)字體顯示為紅色。

2、模板:

<table>
    <tr>
        <td>姓名</td>
        <td>年齡</td>
        <td>錢包</td>
    </tr>
    <#list stus as stu>
        <tr>
            <td >${stu.name}</td>
            <td>${stu.age}</td>
            <td >${stu.mondy}</td>
        </tr>
    </#list>

</table>

3、輸出:

姓名為“小強”則字體顏色顯示為紅色。
springboot集成freemarker,Java,spring boot,java,后端

運算符

1、算數(shù)運算符

FreeMarker表達式中完全支持算術(shù)運算,FreeMarker支持的算術(shù)運算符包括:

  • 加法: +
  • 減法: -
  • 乘法: *
  • 除法: /
  • 求模 (求余): %

模板代碼

<b>算數(shù)運算符</b>
<br/><br/>
    100+5 運算:  ${100 + 5 }<br/>
    100 - 5 * 5運算:${100 - 5 * 5}<br/>
    5 / 2運算:${5 / 2}<br/>
    12 % 10運算:${12 % 10}<br/>
<hr>

除了 + 運算以外,其他的運算只能和 number 數(shù)字類型的計算。
2、比較運算符

  • =或者==:判斷兩個值是否相等.
  • !=:判斷兩個值是否不等.
  • >或者gt:判斷左邊值是否大于右邊值
  • >=或者gte:判斷左邊值是否大于等于右邊值
  • <或者lt:判斷左邊值是否小于右邊值
  • <=或者lte:判斷左邊值是否小于等于右邊值

= 和 == 模板代碼

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Hello World!</title>
</head>
<body>

    <b>比較運算符</b>
    <br/>
    <br/>

    <dl>
        <dt> =/== 和 != 比較:</dt>
        <dd>
            <#if "xiaoming" == "xiaoming">
                字符串的比較 "xiaoming" == "xiaoming"
            </#if>
        </dd>
        <dd>
            <#if 10 != 100>
                數(shù)值的比較 10 != 100
            </#if>
        </dd>
    </dl>



    <dl>
        <dt>其他比較</dt>
        <dd>
            <#if 10 gt 5 >
                形式一:使用特殊字符比較數(shù)值 10 gt 5
            </#if>
        </dd>
        <dd>
            <#-- 日期的比較需要通過?date將屬性轉(zhuǎn)為data類型才能進行比較 -->
            <#if (date1?date >= date2?date)>
                形式二:使用括號形式比較時間 date1?date >= date2?date
            </#if>
        </dd>
    </dl>

    <br/>
<hr>
</body>
</html>

Controller 的 數(shù)據(jù)模型代碼

@GetMapping("operation")
public String testOperation(Model model) {
    //構(gòu)建 Date 數(shù)據(jù)
    Date now = new Date();
    model.addAttribute("date1", now);
    model.addAttribute("date2", now);
    
    return "03-operation";
}

比較運算符注意

  • =和!=可以用于字符串、數(shù)值和日期來比較是否相等
  • =和!=兩邊必須是相同類型的值,否則會產(chǎn)生錯誤
  • 字符串 “x” 、"x " 、"X"比較是不等的.因為FreeMarker是精確比較
  • 其它的運行符可以作用于數(shù)字和日期,但不能作用于字符串
  • 使用gt等字母運算符代替>會有更好的效果,因為 FreeMarker會把>解釋成FTL標簽的結(jié)束字符
  • 可以使用括號來避免這種情況,如:<#if (x>y)>
邏輯運算符
  • 邏輯與:&&
  • 邏輯或:||
  • 邏輯非:!

邏輯運算符只能作用于布爾值,否則將產(chǎn)生錯誤 。

模板代碼

<b>邏輯運算符</b>
    <br/>
    <br/>
    <#if (10 lt 12 )&&( 10  gt  5 )  >
        (10 lt 12 )&&( 10  gt  5 )  顯示為 true
    </#if>
    <br/>
    <br/>
    <#if !false>
        false 取反為true
    </#if>
<hr>
空值處理

1、判斷某變量是否存在使用 “??”

用法為:variable??,如果該變量存在,返回true,否則返回false

例:為防止stus為空報錯可以加上判斷如下:

    <#if stus??>
    <#list stus as stu>
    	......
    </#list>
    </#if>

2、缺失變量默認值使用 “!”

  • 使用!要以指定一個默認值,當變量為空時顯示默認值
    例: ${name!‘’}表示如果name為空顯示空字符串。

  • 如果是嵌套對象則建議使用()括起來
    例: ${(stu.bestFriend.name)!‘’}表示,如果stu或bestFriend或name為空默認顯示空字符串。文章來源地址http://www.zghlxwxcb.cn/news/detail-680818.html

到了這里,關(guān)于Springboot集成Freemarker|超級詳細,建議收藏的文章就介紹完了。如果您還想了解更多內(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進階(49):SpringBoot之集成WebSocket實現(xiàn)前后端通信 | 超級詳細,建議收藏

    Spring Boot進階(49):SpringBoot之集成WebSocket實現(xiàn)前后端通信 | 超級詳細,建議收藏

    ????????在上一期,我對WebSocket進行了基礎(chǔ)及理論知識普及學習,WebSocket是一種基于TCP協(xié)議實現(xiàn)的全雙工通信協(xié)議,使用它可以實現(xiàn)實時通信,不必擔心HTTP協(xié)議的短連接問題。Spring Boot作為一款微服務(wù)框架,也提供了輕量級的WebSocket集成支持,本文將介紹如何在Spring Boot項

    2024年02月14日
    瀏覽(27)
  • SpringBoot系列(四十二):配置Undertow容器|超級詳細,建議收藏

    SpringBoot系列(四十二):配置Undertow容器|超級詳細,建議收藏

    環(huán)境說明:Windows10+idea2021.3.2+jdk1.8+springboot2.3.1.RELEASE ????????Undertow是一個高性能、靈活、輕量級的Web容器,它是Spring Boot默認的Web容器。與Tomcat相比,Undertow具有更快的啟動速度、更低的內(nèi)存占用,以及更好的性能和可擴展性。本篇文章將介紹如何配置Undertow容器,讓你的

    2023年04月20日
    瀏覽(40)
  • Spring Boot入門(04):SpringBoot實現(xiàn)多環(huán)境配置文件切換 | 超級詳細,建議收藏

    Spring Boot入門(04):SpringBoot實現(xiàn)多環(huán)境配置文件切換 | 超級詳細,建議收藏

    ? ? ? ? 在開發(fā)和部署Spring Boot應(yīng)用的過程中,經(jīng)常需要在不同的環(huán)境中進行配置,比如開發(fā)環(huán)境、測試環(huán)境、生產(chǎn)環(huán)境等。為了方便管理和部署,我們需要實現(xiàn)多環(huán)境配置文件切換。本篇教程將帶你輕松搞定不同環(huán)境部署問題,讓你的應(yīng)用在各個環(huán)境中穩(wěn)定運行。無論你是

    2024年02月12日
    瀏覽(31)
  • SpringBoot系列(四十四):Tomcat與Undertow容器性能對比分析|超級詳細,建議收藏

    SpringBoot系列(四十四):Tomcat與Undertow容器性能對比分析|超級詳細,建議收藏

    ????????Tomcat和Undertow都是非常流行的Java Web容器,它們都有自己的優(yōu)缺點。但在實際項目中,我們?nèi)绾芜x擇最合適的容器呢?是選擇老牌的Tomcat,還是選擇后起之秀的Undertow?本篇文章將深入分析Tomcat和Undertow的性能表現(xiàn),為大家揭秘最佳選擇!無論你是Java開發(fā)者還是想深

    2023年04月21日
    瀏覽(45)
  • 最詳細的Keycloak教程(建議收藏):Keycloak實現(xiàn)手機號、驗證碼登陸——(二)Keycloak與SpringBoot的集成

    最詳細的Keycloak教程(建議收藏):Keycloak實現(xiàn)手機號、驗證碼登陸——(二)Keycloak與SpringBoot的集成

    上一篇已經(jīng)介紹了keycloak的下載與使用: Keycloak的下載與使用 本文章和大家分享keycloak怎么去集成springboot項目,以及怎么去做接口權(quán)限的校驗。 PS:根據(jù)紅帽的公告,目前在springboot 3.x版本已經(jīng)不支持keycloak適配器,所以本章基于 springboot 2.7.16 版本,集成keycloak做登錄校驗,并

    2024年02月05日
    瀏覽(91)
  • Spring Boot進階(51):Spring Boot項目如何集成 HTML?| 超級詳細,建議收藏

    Spring Boot進階(51):Spring Boot項目如何集成 HTML?| 超級詳細,建議收藏

    ? ? ? ? 我們都知道,Spring Boot作為一款廣泛應(yīng)用于企業(yè)級的開發(fā)框架,其通過簡化開發(fā)過程、提高開發(fā)效率贏得了眾多開發(fā)者的青睞。在實際項目開發(fā)中,集成 HTML作為 Web 應(yīng)用程序中的一個基本需求,也是現(xiàn)在極其常見的場景之一。在此,我將為大家分享一下Spring Boot如何

    2024年02月15日
    瀏覽(30)
  • Spring Boot進階(84):Spring Boot集成Shiro:安全、簡單、快捷 | 超級詳細,建議收藏

    ????????隨著互聯(lián)網(wǎng)的快速發(fā)展,越來越多的應(yīng)用程序需要進行用戶身份驗證和權(quán)限控制,保障系統(tǒng)的安全性和穩(wěn)定性,以此而來Shiro。Shiro是一個易于使用的Java安全框架,其提供了身份驗證、授權(quán)、加密、會話管理等功能,可以輕松地與Spring框架集成,是企業(yè)級應(yīng)用程序

    2024年02月04日
    瀏覽(29)
  • Spring Boot進階(52):Spring Boot 如何集成Flyway并初始化執(zhí)行 SQL 腳本?| 超級詳細,建議收藏

    ? ? ? ?在我們的認知中,我們會使用 SVN 或 Git 進行代碼的版本管理。但是,我們是否好奇過,數(shù)據(jù)庫也是需要進行版本管理的呢? ????????在每次發(fā)版的時候,我們可能都會對數(shù)據(jù)庫的表結(jié)構(gòu)進行新增和變更,又或者需要插入一些初始化的數(shù)據(jù)。而我們的環(huán)境不僅僅只

    2024年02月15日
    瀏覽(20)
  • springboot集成mqtt(超級無敵詳細)

    springboot集成mqtt(超級無敵詳細)

    1. 引入pom依賴 2. application.yml application.properties 3. MqttConfiguration.java 4. MyMQTTClient.java 5. MyMQTTCallback.java 6. MqttMsg.java 7. MqttController.java 8.SpringUtils.java 8.測試 發(fā)送和接收 springboot后臺日志

    2024年02月03日
    瀏覽(21)
  • Spring Boot進階(21):配置Undertow容器 | 超級詳細,建議收藏

    Spring Boot進階(21):配置Undertow容器 | 超級詳細,建議收藏

    環(huán)境說明:Windows10+idea2021.3.2+jdk1.8+springboot2.3.1.RELEASE ????????Undertow是一個高性能、靈活、輕量級的Web容器,它是Spring Boot默認的Web容器。與Tomcat相比,Undertow具有更快的啟動速度、更低的內(nèi)存占用,以及更好的性能和可擴展性。本篇文章將介紹如何配置Undertow容器,讓你的

    2024年02月06日
    瀏覽(31)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包