使用 Velocity 模板引擎的 Spring Boot 应用
使用 Velocity 模板引擎的 Spring Boot 应用
模板引擎是构建动态内容的重要工具,特别适用于生成HTML、邮件内容、报告和其他文本文档。Velocity是一个强大的模板引擎,它具有简单易用的语法和灵活性。本文将介绍如何在Spring Boot应用中使用Velocity模板引擎,并提供示例代码。

Velocity 简介
Velocity是一个用于生成文本输出的模板引擎。它是一种轻量级的、开源的工具,最初由Apache开发。Velocity的主要特点包括:
-
简单的语法: Velocity使用简单的模板语法,易于学习和使用。
-
灵活性: Velocity允许在模板中嵌套、迭代和使用条件语句,以便生成复杂的输出。
-
模板重用: 模板可以被多次重用,从而减少了重复代码。
-
可扩展性: Velocity可以与Java代码集成,允许在模板中调用Java方法。
-
广泛支持: Velocity可以用于生成HTML、XML、JSON等多种文本格式。
创建 Spring Boot 项目
首先,确保您已经安装了Java开发环境和Maven。接下来,您可以使用Spring Initializer创建一个新的Spring Boot项目。在https://start.spring.io/上选择您的项目配置,然后生成项目并下载。
添加 Velocity 依赖
在生成的项目中,您需要添加Velocity的依赖。在pom.xml文件中,确保以下依赖项已经添加:
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3.1</version>
</dependency>
这将包括Velocity所需的所有依赖。
创建 Velocity 模板
接下来,您需要创建一个Velocity模板。在src/main/resources/templates目录中,创建一个名为hello.vm的Velocity模板文件:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello Velocity</title>
</head>
<body><h1>Hello, $name!</h1>
</body>
</html>
在上述模板中,我们定义了一个简单的HTML页面,使用Velocity语法插入了一个变量$name。
创建控制器
现在,您可以创建一个控制器来处理Velocity模板的渲染。在src/main/java/com/example/demo包中创建一个名为HelloController的类:
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import javax.annotation.PostConstruct;
import java.io.StringWriter;@Controller
public class HelloController {private final VelocityEngine velocityEngine;public HelloController(VelocityEngine velocityEngine) {this.velocityEngine = velocityEngine;}@PostConstructpublic void init() {velocityEngine.init();}@GetMapping("/hello")public String hello(Model model) {VelocityContext velocityContext = new VelocityContext();velocityContext.put("name", "Spring Boot with Velocity");Template template = velocityEngine.getTemplate("templates/hello.vm");StringWriter stringWriter = new StringWriter();template.merge(velocityContext, stringWriter);model.addAttribute("htmlContent", stringWriter.toString());return "hello";}
}
在上述代码中,我们创建了一个HelloController,它使用Velocity引擎来渲染hello.vm模板。在init方法中,我们初始化了Velocity引擎。在hello方法中,我们创建了一个VelocityContext并将name变量传递给模板。然后,我们获取模板并将模板内容合并到stringWriter中,最后将HTML内容添加到模型中。
创建模板渲染视图
为了显示Velocity模板渲染的内容,我们需要创建一个模板渲染视图。在src/main/resources/templates目录中,创建一个名为hello.html的HTML文件:
<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><title>Hello Velocity</title>
</head>
<body><div th:utext="${htmlContent}"></div>
</body>
</html>
在上述HTML文件中,我们使用Thymeleaf的th:utext属性来渲染HTML内容,该内容存储在${htmlContent}变量中。
配置 Velocity 属性
最后,您需要在application.properties文件中添加Velocity属性配置:
# Velocity Configuration
spring.velocity.resource-loader-path=classpath:/templates/
spring.velocity.suffix=.vm
这些配置告诉Spring Boot在classpath:/templates/目录中查找Velocity模板文件,并指定了模板文件的后缀。
运行应用程序
现在,您可以运行应用程序了。使用Maven命令:
mvn spring-boot:run
您的Spring Boot应用程序将启动并运行在默认端口(通常是8080)上。
访问 Velocity 模板
使用浏览器访问http://localhost:8080/hello,您将看到Velocity模板渲染的页面,页面上将显示"Hello, Spring Boot with Velocity!"。
总结
本文介绍了如何在Spring Boot应用程序中使用Velocity模板引擎来生成动态内容。Velocity是一个强大的模板引擎,适用于生成HTML、XML、JSON等多种文本格式的内容。通过配置Velocity引擎、创建模板和控制器,您可以轻松地将Velocity集成到Spring Boot应用中。
以上是使用Velocity模板引擎的示例。希望这篇文章对您有所帮助,让您更好地了解如何在Spring Boot应用程序中使用Velocity来生成动态内容
相关文章:
使用 Velocity 模板引擎的 Spring Boot 应用
使用 Velocity 模板引擎的 Spring Boot 应用 模板引擎是构建动态内容的重要工具,特别适用于生成HTML、邮件内容、报告和其他文本文档。Velocity是一个强大的模板引擎,它具有简单易用的语法和灵活性。本文将介绍如何在Spring Boot应用中使用Velocity模板…...
mysql的mvcc详解
一 MVCC的作用 1.1 mvcc的作用 1.MVCC(Multiversion Concurrency Control)多版本并发控制。即通过数据行的多个版本管理来实现数据库的并发控制,使得在InnoDB事务隔离级别下执行一致性读操作有了保障。 2.mysql中的InnoDB中实现了MVCC主要…...
FreeRTOS两个死机原因(中断调用接口异常)【杂记】
1、中断回调函数中没有使用中断级API (xxFromISR) 函数 xSemaphoreGiveFromISR(uart_busy,&HighterTask);----正确 xSemaphoreGive(uart_busy);-----错误2、比configMAX_SYSCALL_INTERRUPT_PRIORITY优先级高的中断函数中使用了FreeRTOS的函数 3、临界代码保护后不可调用os…...
【AI视野·今日Robot 机器人论文速览 第四十三期】Thu, 28 Sep 2023
AI视野今日CS.Robotics 机器人学论文速览 Thu, 28 Sep 2023 Totally 37 papers 👉上期速览✈更多精彩请移步主页 Interesting: 📚****触觉力控学习策略,基于触觉的主动推理与力控用于小孔插入任务。提出了姿态控制与插入控制双策略模型。 (from 东京大学…...
批量快捷创建新数组的几种方式
1. for循环, push(比较简单, 就不上代码了) 2.创建空数组,填充null,然后map: function createData() { return new Array(1000) .fill(null) .map((v,i)>({name: name${i1}})) } console.log(createData()) 3.Array.frommap function createData() { return Array.from…...
单目标应用:基于沙丁鱼优化算法(Sardine optimization algorithm,SOA)的微电网优化调度MATLAB
一、沙丁鱼优化算法 沙丁鱼优化算法(Sardine optimization algorithm,SOA)由Zhang HongGuang等人于2023年提出,该算法模拟沙丁鱼的生存策略,具有搜索能力强,求解精度高等特点。 沙丁鱼主要以浮游生物为食,这些生物包括细菌、腔肠…...
基于Halo搭建个人博客
准备 云服务器 安装Docker 开启8090端口 步骤 拉取Halo镜像 docker pull halohub/halo:2.1.0 制作容器并启动 docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.1.0 --halo.external-urlhttp://服务器ip:8090/ --halo.security.in…...
DPDK系列之三十一DPDK的并行机制简介
一、并行机制 什么是并行机制?这个很多开发者的眼中,其实是模糊的。可能说起来头头是道,但是细一查究竟,发现都是飘在空中的东西。在前面的“多核和多CPU编程”中,对并行机制已经进行了较深入的分析,这里只…...
【Java】复制数组的四种方式
1. System.arraycopy() 用来将一个数组的(一部分)内容复制到另一个数组里面去。 定义: void arraycopy(Object src, int srcPos, Object dest, int destPos, int length);例: int[] arr1 { 1, 2, 3, 4, 5 }; int[] arr2 new…...
设计模式5、原型模式 Prototype
解释说明:使用原型实例指定待创建对象的类型,并且通过复制这个原型阿里创建型的对象 UML 结构图: 抽象原型(Prototype):规定了具体原型对象必须实现的clone()方法 具体原型(ConcretePrototype&…...
驱动挂载物理页代码示例
驱动挂载物理页代码示例 使用的实验环境为32位xp系统在101012分页模式下 此实验用于测试对分页模式的掌握程度 代码思路如下: 获取目标进程的cr3在目标进程中申请新的物理页拆分新申请的物理页的线性地址通过差分出的内容获取pte将pte写入到要挂载的线性地址的p…...
【新版】系统架构设计师 - 层次式架构设计理论与实践
个人总结,仅供参考,欢迎加好友一起讨论 文章目录 架构 - 层次式架构设计理论与实践考点摘要层次式体系结构概述表现层框架设计MVC模式MVP模式MVVM模式使用XML设计表现层表现层中UIP设计思想 中间层架构设计业务逻辑层工作流设计业务逻辑层设计 数据访问层…...
大数据Flink(九十):Lookup Join(维表 Join)
文章目录 Lookup Join(维表 Join) Lookup Join(维表 Join) Lookup Join 定义(支持 Batch\Streaming):Lookup Join 其实就是维表 Join,比如拿离线数仓来说,常常会有用户画像,设备画像等数据,而对应到实时数仓场景中,这种实时获取外部缓存的 Join 就叫做维表 Join。…...
Docker方式创建MySQL8的MGR集群
目录 一、MGR简述二、安装环境及要求2.1 系统版本2.2 网络要求 三、安装步骤3.1 创建容器3.2 创建用户3.3 安装插件3. 4 启动集群3.5 加入集群 四、查看集群查看 MGR 组成员列表查看 MGR 组成员拓扑信息 五、其他说明集群配置要求集群配置限制集群相关变量和状态 一、MGR简述 …...
问 ChatGPT 关于GPT的事情:扩展篇
一、GPT预训练有什么节省显存和算力的技巧吗?我如何拿四块A100完成175B模型的预训练? 对于GPT预训练,有一些技巧可以帮助节省显存和算力。以下是一些常用的技巧: 按批次截断:在较长的文本序列中,将其切割…...
Spring Boot 集成 MinIO 实现文件上传、下载和删除
MinIO 是一种开源的对象存储服务,它基于云原生架构构建,并提供了高性能、易于扩展和安全的存储解决方案。 一.安装和配置 MinIO 服务器 为了演示方便,本文采用Windows安装 1.在官方网站下载MinIO 安装文件,地址:ht…...
Polygon Miden交易模型:Actor模式 + ZKP => 并行 + 隐私
1. 引言 前序博客: Polygon Miden:扩展以太坊功能集的ZK-optimized rollupPolygon Miden zkRollup中的UTXO账户混合状态模型 Polygon Miden为: ZK-optimized rollup由客户端生成证明完善Polygon ZK系列解决方案,致力于成为网络…...
Java流的体系结构(二)
文章目录 一、对象流的使用1.概念2.序列化机制3.代码案例:序列化过程:将内存中的java对象保存到磁盘中或通过通络传输出去4.反序列化,将磁盘文件中的对象还原为内存中的一个java对象 二、RandomAccessFile的使用1.说明2.代码案例 提示&#x…...
python计算阶层
阶层(Factorial)是指从1到一个正整数n的所有整数相乘,即n! 1 2 3 … n。下面是Python代码计算阶层: def factorial(n):"""计算阶层:param n: 正整数:return: n的阶层"""if n 1 or n 0:retu…...
前端架构师之01_ES6_基础
1 初识ES6 简单来说,ECMAScript是JavaScript语言的国际标准,JavaScript是实现ECMAScript标准的脚本语言。 2011年,ECMA国际标准化组织在发布ECMAScript 5.1版本之后,就开始着手制定第6版规范。 存在的问题:这个版本…...
如何一键备份你的QQ空间历史说说:GetQzonehistory完整指南
如何一键备份你的QQ空间历史说说:GetQzonehistory完整指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 你是否曾担心QQ空间里的珍贵回忆会随着时间消失?那些承…...
Z-Image-Turbo-辉夜巫女材质与光影专题:金属、玻璃、织物等不同质感的极致渲染
Z-Image-Turbo-辉夜巫女材质与光影专题:金属、玻璃、织物等不同质感的极致渲染 你有没有想过,为什么有些AI生成的图片看起来“假假的”,一眼就能认出来?很多时候,问题就出在“质感”上。金属不像金属,玻璃…...
构建高性能本地服务穿透通道:Rust异步网络隧道实践
构建高性能本地服务穿透通道:Rust异步网络隧道实践 【免费下载链接】tunnelto Expose your local web server to the internet with a public URL. 项目地址: https://gitcode.com/GitHub_Trending/tu/tunnelto 在分布式开发和远程协作日益普及的今天&#x…...
v-md-editor进阶技巧:如何在Vue2中实现markdown与HTML的双向转换
Vue2项目中v-md-editor深度应用:Markdown与HTML双向转换实战指南 在内容管理系统、技术文档平台或博客应用中,Markdown与HTML格式的相互转换是开发者常遇到的核心需求。v-md-editor作为Vue生态中功能强大的Markdown编辑器,其双向转换能力往往…...
戴森球计划终极蓝图指南:从新手到专家的模块化工厂设计完全教程
戴森球计划终极蓝图指南:从新手到专家的模块化工厂设计完全教程 【免费下载链接】FactoryBluePrints 游戏戴森球计划的**工厂**蓝图仓库 项目地址: https://gitcode.com/GitHub_Trending/fa/FactoryBluePrints 你是否曾在戴森球计划中面对复杂的生产线感到手…...
Pixel Mind Decoder 命令行工具开发:使用Typora风格交互进行情绪随笔分析
Pixel Mind Decoder 命令行工具开发:使用Typora风格交互进行情绪随笔分析 1. 引言:当写作遇上情绪分析 你有没有过这样的体验?在Typora里奋笔疾书时,突然想知道这段文字传递出怎样的情绪色彩。作为一个经常用Markdown写作的人&a…...
Windows 10/11 下保姆级安装TagUI RPA工具指南(含Chrome路径配置与中文乱码解决)
Windows 10/11 下保姆级安装TagUI RPA工具指南(含Chrome路径配置与中文乱码解决) 在数字化转型浪潮中,机器人流程自动化(RPA)正成为提升效率的利器。作为一款开源RPA工具,TagUI以其轻量级和易用性吸引了众多…...
Pixel Dream Workshop详细步骤:日志系统集成与渲染异常诊断方法
Pixel Dream Workshop详细步骤:日志系统集成与渲染异常诊断方法 1. 像素幻梦创意工坊简介 Pixel Dream Workshop(像素幻梦创意工坊)是一款基于FLUX.1-dev扩散模型的下一代像素艺术生成工具。它采用明亮的16-bit像素风格界面设计,…...
BilibiliDown高效使用指南:解决20个核心功能难题
BilibiliDown高效使用指南:解决20个核心功能难题 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader 😳 项目地址: https://gitcode.com/gh_mirrors/bi/Bil…...
文墨共鸣大模型生成技术教程:以“计算机组成原理”为例的课件与习题制作
文墨共鸣大模型生成技术教程:以“计算机组成原理”为例的课件与习题制作 作为一名在技术领域摸爬滚打了十多年的从业者,我见过太多优秀的工具因为“用起来太麻烦”而被束之高阁。今天,我想和你分享一个让我眼前一亮的“AI助教”——文墨共鸣…...
