springboot_3.2_freemark_基礎環境配置

springboot_3.2_freemark_基礎環境配置

    • 一、前言
    • 二、環境
    • 三、相關資料
    • 四、目標
    • 五、默認配置項
    • 六、構建springboot 3.2項目
      • 6.1 pom.xml 內容:
      • 6.2 啟動類
      • 6.3 添加ftlh模板
      • 6.4 controller內容
      • 6.5 bootstrap.yml配置
    • 七、總結

一、前言

FreeMarker 是一款模板引擎:即一種基于模板和要改變的數據, 并用來生成輸出文本(HTML網頁,電子郵件,配置文件,源代碼等)的通用工具。 它不是面向最終用戶的,而是一個Java類庫,是一款程序員可以嵌入他們所開發產品的組件。
模板編寫為FreeMarker Template Language (FTL)。它是簡單的標簽語言。需要在服務器端組織數據,之后通過編寫FTL模板顯示已經準備好的數據。在模板中,你可以專注于如何展現數據,而在模板之外可以專注于要展示什么數據。

注:從freemarker 2.x 開始模板的默認后綴由 ftl 改為 ftlh(配置類FreeMarkerProperties.DEFAULT_SUFFIX)。

二、環境

  • java 21
  • springboot 3.2

三、相關資料

  • freemark中文管網

四、目標

  • sprinboot 3.2 整合freemarker基礎配置;
  • 加入freemarker模板;
  • 編寫controller將綁定數據輸出到模板中;
  • 運行測試頁面;

五、默認配置項

  • jar包:spring-boot-autoconfigure-3.2.0.jar
    • 對象:org.springframework.boot.autoconfigure.freemarker.FreeMarkerProperties

六、構建springboot 3.2項目

項目是通過idea腳手架創建,由于2.x不在維護,建項目時通過服務(https://start.spring.io)只能創建springboot3.x項目,如果想要創建低版本可以使用阿里的腳手架(start.aliyun.com)。springboot3.x只支持java 17 及以上版本。所以建項目前先配置好本地的jdk。

idea腳手架服務更改位置:file/New/New Project/Sping Initializr : Server URL start.string.io ,點擊后面的齒輪標記修改!

6.1 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 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>3.2.0</version><relativePath/> <!-- lookup parent from repository --></parent><groupId>com.test</groupId><artifactId>test2312</artifactId><version>0.0.1-SNAPSHOT</version><name>test2312</name><description>test2312</description><properties><java.version>21</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><configuration><excludes><exclude><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></exclude></excludes></configuration></plugin></plugins></build></project>

6.2 啟動類

其中在@SpringBootApplication注解中屏蔽了DataSourceAutoConfiguration.class的加載,目的是避免出現“
Failed to configure a DataSource: ‘url’ attribute is not specified and no embedded datasource could be configured.”
錯誤提示。

因為我們目的只是驗證freemarker,不需要數據庫相關的依賴,所以不需要配置數據源相關配置。而springboot基礎依賴中默認加載了MySQL、Oracle、Mybatis等和數據庫相關的依賴包,結果我們的配置文件中卻沒有添加數據庫相關的配置。

package com.test;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration;@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class
})
public class StartApplication {public static void main(String[] args) {SpringApplication.run(StartApplication.class, args);}}

6.3 添加ftlh模板

freemarker2.x開始默認的后綴由ftl改為ftlh了,使用ftl在freemarker3.x中是找不到的。
模板中對spring、list、map等常用的類型,做了綁定和遍歷示例。加了個test目錄是需要與后面的controller的地址一致。

模板位置:resources\templates\test\index.ftlh

<html>
<head><title>Welcome!</title>
</head>
</body><br><h1>Welcome ${user} !</h1><br><b>展示list中的數據:</b><p><ul><#list lst as item><li>${item}</li></#list></ul><ul></ul></p>
<p><b>map遍歷:key值遍歷</b><ul><#assign  keys=map?keys/><#list keys as key><li>key=${key}; value=${map["${key}"]};</li></#list></ul><b>map遍歷:直接遍歷</b><ul><#list map?keys as key><li>key=${key}; value=${map["${key}"]};</li></#list></ul><b>map遍歷:直接遍歷值</b><ul><#list map?values as value><li>value=${value};</li></#list></ul>
</p>
</body>
</html>

6.4 controller內容

controller中有兩個方法,分別是返回text內容 和 綁定ftlh模板內容。

package com.test.controller;import lombok.extern.log4j.Log4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.View;import java.util.Arrays;
import java.util.HashMap;@Controller
@RequestMapping("/test")
public class TestController {private Logger logger = LoggerFactory.getLogger(this.getClass());@GetMapping("/hello")@ResponseBodypublic String hello(){logger.info("hello word~~~");return "hello word!";}@GetMapping("/index.html")public String index(Model model){model.addAttribute("user","joy");var lst = Arrays.asList("11","22","33");var lst4empty = new HashMap<>();var map = new HashMap<String,Object>(){{put("k1",11);}{put("k2",22);}{put("k3",33);}};model.addAttribute("lst",lst);model.addAttribute("lst4empty",lst4empty);model.addAttribute("map",map);logger.info("test index ~~~");return "/test/index";}}

6.5 bootstrap.yml配置

使用這個配置可以方便做環境切換,啟動項目時傳入dev這個forfile參數可以讀到dev環境配置。

spring:profiles.active: ${profile:dev}application:name: test2312http:multipart:max-file-size: 2MBmax-request-size: 2MB
---
spring.profiles: dev
spring:freemarker:templateLoaderPath: classpath:/templates/preferFileSystemAccess: true  #支持熱加載,默認為true(生產時false)

七、總結

以上就是一個比較基礎的整合過程,需要注意的是通過idea構建時依賴盡量選擇少的依賴,否則容易出現各種錯誤。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/213075.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/213075.shtml
英文地址,請注明出處:http://en.pswp.cn/news/213075.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux——緩沖區與實現C庫的fopen,fwrite,fclose

目錄 一.緩沖區 1緩沖區的概念 2.緩沖區存在的意義 3.緩沖區刷新策略 4.什么是刷新&#xff1f; C語言的緩沖區在哪里&#xff1f; ?編輯 仿寫C庫里的fopen&#xff0c;fclose&#xff0c;fwrite。 mystdio.h mystdio.c main.c(向文件中寫入20次msg) 一.緩沖區 1…

b站pwn的學習總結

寫的很亂 1.c語言的運行過程 了解了c語言需要經過以上2個過程&#xff08;編譯和匯編&#xff09;&#xff0c;才能讓機器按指令運行。機器只能聽得懂機器碼&#xff0c;所以要“匯編”。 那問題就來了&#xff0c;“編譯”這個動作有啥用&#xff0c;c語言這種高級語言&…

玩轉大數據10:深度學習與神經網絡在大數據中的應用

目錄 1. 引言&#xff1a;深度學習和神經網絡在大數據中的重要性和應用場景 2. 深度學習的基本概念和架構 3. Java中的深度學習框架 3.1. Deeplearning4j框架介紹及Java編程模型 3.2. DL4J、Keras和TensorFlow的集成 4. 大數據與深度學習的結合 4.1. 大數據與深度學…

電腦端同時登錄多個微信

1、建立一個txt文件 2、右擊微信查看應用的屬性&#xff0c;記錄文件的位置 3、將步驟二得到的路徑按照下方的格式輸入到步驟一的文本中 4、保存之后將文本后綴名的.txt改成.bat 5、在未登錄微信的情況下&#xff0c;雙擊即可得到兩個微信登錄窗口

Python高級算法——回溯法(Backtracking)

Python中的回溯法&#xff08;Backtracking&#xff09;&#xff1a;高級算法解析 回溯法是一種通過嘗試所有可能的解來找到問題解的算法設計方法。它通常應用于組合問題、排列問題、子集問題等。在本文中&#xff0c;我們將深入講解Python中的回溯法&#xff0c;包括基本概念…

解決oracle.sql.TIMESTAMP序列化轉換失敗問題 及 J2EE13Compliant原理

目錄 報錯現象報錯內容處理方法Oracle驅動源碼總結 報錯現象 oracle表中存在TIMESTAMP類型的列時&#xff0c;jdbc查出來做序列化時報錯 報錯內容 org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.springframewo…

x86和ARM中配置無線網SSID和PASSWORD

提供一個可行的方法 1.準備文件 hostapd.conf &#xff1a;是用戶控件的守護進程用于無線接入點&#xff08;AP&#xff09;和授權服務器&#xff08;authentication servers)&#xff0c;存放路徑&#xff1a;/etc/hostapd/hostapd.conf interfacewlp5s0 drivernl80211 chan…

Java中多線程中 synchronized 鎖升級的原理是什么?

Java中多線程中 synchronized 鎖升級的原理是什么&#xff1f; 在 Java 中&#xff0c;synchronized 鎖的升級是指在不同的場景下&#xff0c;鎖的性能優化。Java 的鎖有多個狀態&#xff0c;主要包括偏向鎖、輕量級鎖和重量級鎖。 偏向鎖&#xff1a;當只有一個線程訪問同步塊…

acwing算法提高之動態規劃--背包模型(三)

目錄 1 基礎知識2 模板3 工程化 1 基礎知識 暫無。。。 2 模板 暫無。。。 3 工程化 題目1&#xff1a;潛水員。 解題思路&#xff1a;DP。 狀態定義f[i][j][k]&#xff1a;從前i個物品中選&#xff0c;氧氣至少為j&#xff0c;氮氣至少為k的最小方案數。 狀態轉移&…

解決idea 通過build project 手動觸發熱部署失敗

在debug運行項目的過程中&#xff0c;并且保證&#xff08;不添加方法&#xff0c;不修改方法名&#xff09;一定的規則的情況下&#xff0c;可以通過build project 來手動熱部署項目&#xff0c;也就是會交換class文件與resouces文件。 設置項 Edit Configurations Modify Op…

計算機圖形學理論(1):建模基礎

本系列根據國外一個圖形小哥的講解為本&#xff0c;整合互聯網的一些資料&#xff0c;結合自己的一些理解。 場景的組成部分 場景相當于一個或多個模型的集合。模型包含以下內容&#xff1a; 結構描述&#xff1a;幾何形狀&#xff0c;如頂點、紋理坐標等表面描述&#xff1a…

Vue3中的defineModel

目錄 一、vue3的defineModel介紹 二、defineModel使用 &#xff08;1&#xff09;在vite.config.js中開啟 &#xff08;2&#xff09;子組件 &#xff08;3&#xff09;父組件 一、vue3的defineModel介紹 為什么要使用到defineModel呢&#xff1f;這里有這樣一種場景&…

“快速排序:一種美麗的算法混沌”(1.hoare)

歡迎來到我的博客&#xff01;在今天的文章中&#xff0c;我將采用一種獨特且直觀的方式來探討我們的主題&#xff1a;我會使用一幅圖像來貫穿整篇文章的講解。這幅精心設計的圖表不僅是我們討論的核心&#xff0c;也是一個視覺輔助工具&#xff0c;幫助你更深入地理解和掌握本…

學習深度強化學習---第2部分----RL動態規劃相關算法

文章目錄 2.1節 動態規劃簡介2.2節 值函數與貝爾曼方程2.3節 策略評估2.4節 策略改進2.5節 最優值函數與最優策略2.6節 值迭代與策略迭代2.7節 動態規劃求解最優策略 本部分視頻所在地址&#xff1a;深度強化學習的理論與實踐 2.1節 動態規劃簡介 態規劃有兩種思路&#xff1…

前端 Web Workers 簡介

簡介 以前我們總說&#xff0c;JS 是單線程沒有多線程&#xff0c;當 JS 在頁面中運行長耗時同步任務的時候就會導致頁面假死影響用戶體驗&#xff0c;從而需要設置把任務放在任務隊列中&#xff1b;執行任務隊列中的任務也并非多線程進行的&#xff0c;然而現在 HTML5 提供了…

App備案、ios備案Bundle ID查詢、公鑰信息、SHA-1值

App備案、ios備案Bundle ID查詢、公鑰信息、SHA-1值 Bundle ID這個就不說了&#xff0c;都知道是啥&#xff0c;主要說公鑰信息和SHA-1值的獲取 打開鑰匙串訪問&#xff0c;找到當前需要備案App的dis證書&#xff0c;如下&#xff1a; #####右鍵點擊顯示簡介 #####可以看…

03.仿簡道云公式函數實戰-QLExpress初探

1. 前言 在上一篇文章中&#xff0c;我們簡單介紹了一下表達式引擎&#xff0c;并引出我們的主角QLExpress.在這篇文章中&#xff0c;我們先來一個QLExpress的熱身。 2. 初探QLExpress 源碼地址&#xff1a;https://github.com/alibaba/qlExpress 筆者下載源碼的版本是3.3.…

STL源碼剖析筆記——適配器(adapters)

系列文章目錄 STL源碼剖析筆記——迭代器 STL源碼剖析筆記——vector STL源碼剖析筆記——list STL源碼剖析筆記——deque、stack&#xff0c;queue STL源碼剖析筆記——Binary Heap、priority_queue STL源碼剖析筆記——AVL-tree、RB-tree、set、map、mutiset、mutimap STL源…

【Spring 基礎】00 入門指南

【Spring 基礎】00 入門指南 文章目錄 【Spring 基礎】00 入門指南1.簡介2.概念1&#xff09;控制反轉&#xff08;IoC&#xff09;2&#xff09;依賴注入&#xff08;DI&#xff09; 3.核心模塊1&#xff09;Spring Core2&#xff09;Spring AOP3&#xff09;Spring MVC4&…

php實現截取姓名中的第一個字作為頭像的實戰記錄

php 截取中文字符串第一個字 substr 函數 在 PHP 中&#xff0c;使用 substr 函數來截取中文字符串的第一個字。由于 PHP 默認的字符編碼是 UTF-8&#xff0c;它可以正確處理中文字符。 $chineseString "你好世界"; $firstChar substr($chineseString, 0, 1); e…