Spring Boot:Web开发之视图模板技术的整合

Spring Boot

  • 前言
  • Spring Boot 整合 JSP
  • Spring Boot 整合 FreeMarker
  • Spring Boot 整合 Thymeleaf
    • Thymeleaf 常用语法

在这里插入图片描述

前言

在 Web 开发中,视图模板技术(如 JSP 、FreeMarker 、Thymeleaf 等)用于呈现动态内容到用户界面的工具。这些技术允许开发者使用特定的标记和语法来定义页面布局和动态内容插入点,然后由后端框架(如 Spring Boot )在运行时填充数据并生成最终的 HTML 页面。

  • JSP ( JavaServer Pages ):Java Web 开发中的一个经典视图模板技术。其允许开发者在 HTML 页面中嵌入 Java 代码片段,这些代码片段在服务器端执行并生成动态内容。JSP 文件通常以 .jsp 为后缀,并包含 JSP 标签、表达式和脚本片段。虽然 Spring Boot 更推荐使用 Thymeleaf 等模板引擎,但 JSP 仍然是一个可用的选项,特别是在与遗留系统或特定需求集成时
    在这里插入图片描述

  • FreeMarker:用 Java 语言编写的通用视图模板技术,不仅适用于 Web 开发,还可以用于生成任何文本输出。FreeMarker 模板文件通常以 .ftl 为后缀,并使用特定的 FreeMarker 语法来定义动态内容。其提供了一套丰富的模板指令和函数,使得开发者能够灵活地构建复杂的页面布局和逻辑
    在这里插入图片描述

  • Thymeleaf:现代的服务器端 Java 视图模板技术,特别适用于 Spring 框架,包括 Spring Boot 。其支持 HTML5 ,提供了丰富的标签库和表达式语言,使得开发者能够轻松地构建动态 Web 页面。Thymeleaf 的模板文件通常以 .html 为后缀,并嵌入特定的 Thymeleaf 属性和标签
    在这里插入图片描述

JSP 、FreeMarker 、Thymeleaf 都有各自的优点和适用场景。使用哪个视图模板技术可以根据项目的具体需求、开发者的熟悉程度以及与其他技术栈的集成需求来选择。在 Spring Boot 中,通常可以通过添加相应的 starter 依赖和配置来轻松地整合视图模板技术。下面简单介绍 Spring Boot 整合视图模板技术。

Spring Boot 整合 JSP

Spring Boot 默认并不推荐使用 JSP 作为视图模板技术。但还是可以在 Spring Boot 项目中整合 JSP 的,只不过需要一些额外的配置步骤。

简单示例:
首先,创建新项目 SpringBootIntegJSP ,并在 pom.xml 配置文件中添加以下依赖( spring-boot.version 3.0.2

<dependency><groupId>jakarta.servlet.jsp.jstl</groupId><artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
</dependency><dependency><groupId>org.glassfish.web</groupId><artifactId>jakarta.servlet.jsp.jstl</artifactId>
</dependency><!-- https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper -->
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><version>10.1.5</version>
</dependency>

然后,在 application.properties 全局配置文件中修改默认视图解析器的前缀和后缀

spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

接着,创建相关目录,并指定 webapp 目录为 web 资源存储路径
在这里插入图片描述
在这里插入图片描述

随之,创建 Controller 包并在包内创建一个 JspDemoController 类

package cn.edu.SpringBootIntegJSP.Controller;import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;@Controller
public class JspDemoController {@RequestMapping(value = "/JspDemo",method = RequestMethod.GET) // 或者简写成 @GetMapping("/JspDemo")public String JspDemo(Model model){model.addAttribute("test","Spring Boot 整合 JSP");return "JspDemo";}
}

再在 /webapp/WEB-INF/jsp 目录下创建 JspDemo.jsp

<%--Created by IntelliJ IDEA.User: dellDate: 2024/3/23Time: 1:08To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head><title>JSP</title>
</head>
<body>ID:${2024+3+23} <br>测试:${test}
</body>
</html>

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/JspDemo 并按下回车键进行测试
结果如图:
在这里插入图片描述

Spring Boot 整合 FreeMarker

Spring Boot 整合 FreeMarker 相对简单且直接。而对于 FreeMarker 详细的知识点需自行学习了解——FreeMarker 中文官方参考手册。

简单示例:
首先,创建新项目 SpringBootIntegFreeMarker

注:
在勾选启动器上勾选 Web 和 FreeMarker
在这里插入图片描述

然后,分别创建 Entity 包和 Controller 包,并对应在包内创建一个 FreeMarkerDemoEntity 类和 FreeMarkerDemoController 类

package cn.edu.SpringBootIntegFreeMarker.Entity;public class FreeMarkerDemoEntity {private int id;private String name;private String password;public FreeMarkerDemoEntity() {}public FreeMarkerDemoEntity(int id, String name, String password) {this.id = id;this.name = name;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "FreeMarkerDemoEntity{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}
}
package cn.edu.SpringBootIntegFreeMarker.Controller;import cn.edu.SpringBootIntegFreeMarker.Entity.FreeMarkerDemoEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;import java.util.ArrayList;
import java.util.List;@Controller
public class FreeMarkerDemoController {@GetMapping("/FreeMarkerDemo.html")public String FreeMarkerDemo(Model model){List<FreeMarkerDemoEntity> freeMarkerDemoEntities = new ArrayList<>();freeMarkerDemoEntities.add(new FreeMarkerDemoEntity(20240323,"曹操","cc"));freeMarkerDemoEntities.add(new FreeMarkerDemoEntity(20240324,"刘备","lb"));freeMarkerDemoEntities.add(new FreeMarkerDemoEntity(20240325,"孙权","sq"));model.addAttribute("freeMarkerDemoEntities",freeMarkerDemoEntities);return "FreeMarkerDemo";}
}

接着,在 resources 目录下创建 templates 包并创建视图 FreeMarkerDemo.ftl

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>FreeMarker</title>
</head>
<body><#-- # :声明使用 FreeMarker 标签;list 标签:在 FreeMarker 语法中为循环遍历 --><#list freeMarkerDemoEntities as freeMarkerDemoEntity >ID:${freeMarkerDemoEntity.id} 账号:${freeMarkerDemoEntity.name} 密码:${freeMarkerDemoEntity.password} <br></#list>
</body>
</html>

随之,在 application.properties 全局配置文件中指定 freemarker 的模板路径

spring.freemarker.template-loader-path=classpath:/templates/

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/FreeMarkerDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

Spring Boot 整合 Thymeleaf

Thymeleaf 中⽂参考⼿册.pdf

Spring Boot 官方推荐整合 Thymeleaf 作为视图模板技术。Thymeleaf 特别适用于 Web 和独立环境。其提供了完全的 Spring MVC 集成,并允许在 HTML 标签中直接使用表达式语言来动态地渲染页面内容。

简单示例:
首先,创建新项目 SpringBootIntegThymeleaf

注:
在勾选启动器上勾选 Web 和 Thymeleaf
在这里插入图片描述

然后,分别创建 Entity 包和 Controller 包,并对应在包内创建一个 ThymeleafDemoEntity 类和 ThymeleafDemoController 类

package cn.edu.SpringBootIntegThymeleaf.Entity;public class ThymeleafDemoEntity {private int id;private String name;private String password;public ThymeleafDemoEntity() {}public ThymeleafDemoEntity(int id, String name, String password) {this.id = id;this.name = name;this.password = password;}public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "ThymeleafDemoEntity{" +"id=" + id +", name='" + name + '\'' +", password='" + password + '\'' +'}';}
}
package cn.edu.SpringBootIntegThymeleaf.Controller;import cn.edu.SpringBootIntegThymeleaf.Entity.ThymeleafDemoEntity;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;
import java.util.ArrayList;
import java.util.List;@Controller
public class ThymeleafDemoController {@GetMapping("/ThymeleafDemo.html")public String FreeMarkerDemo(Model model){List<ThymeleafDemoEntity> thymeleafDemoEntities = new ArrayList<>();thymeleafDemoEntities.add(new ThymeleafDemoEntity(20240323,"曹操","cc"));thymeleafDemoEntities.add(new ThymeleafDemoEntity(20240324,"刘备","lb"));thymeleafDemoEntities.add(new ThymeleafDemoEntity(20240325,"孙权","sq"));model.addAttribute("thymeleafDemoEntities",thymeleafDemoEntities);return "ThymeleafDemo";}
}

接着,在 resources 目录下创建 templates 包并创建视图 ThymeleafDemo.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Thymeleaf</title>
</head>
<body><div th:each="thymeleafDemoEntities,thymeleafDemoEntity:${thymeleafDemoEntities}"><span th:text="${thymeleafDemoEntities.getId()}" /><span th:text="${thymeleafDemoEntities.getName()}" /><span th:text="${thymeleafDemoEntities.getPassword()}" /></div>
</body>
</html>

最后,启动 Spring Boot ,打开浏览器输入 http://localhost:8080/ThymeleafDemo.html 并按下回车键进行测试
结果如图:
在这里插入图片描述

Thymeleaf 常用语法

Thymeleaf 的常用标签语法总结:

  • 文本显示和替换
    1.th:text:用于设置元素的文本内容,对特殊字符进行转义,不会对 HTML 标签进行解析,而是将其作为普通文本显示
    2.th:utext:用于设置元素的文本内容,不会对特殊字符进行转义,对 HTML 标签进行解析并显示 HTML 标签的内容

  • 链接和引入资源
    1.th:href:用于动态生成链接的 href 属性
    2.th:src:用于动态引入图片、脚本等资源的 src 属性

  • 条件判断
    1.th:if:单条件判断,条件成立时显示标签内容
    2.th:unless:与 th:if 相反,条件不成立时显示标签内容

  • 循环遍历
    th:each:用于遍历集合,每次迭代生成一个标签的副本

  • 属性设置
    th:attr:用于设置标签的多个属性

  • 表单处理
    1.th:action:用于设置表单的提交地址
    2.th:value:用于设置表单元素的值

  • 内联JavaScript
    th:inline="javascript":用于在 JavaScript 代码中插入 Thymeleaf 表达式

  • 片段插入和替换
    th:insertth:replace:用于插入或替换页面的片段

  • 选择变量表达式
    :(...):用于根据条件选择不同的值

  • 注释
    1.<!-- ... -->:标准的 HTML 注释,Thymeleaf 不会处理
    2.<!--/* ... */-->:Thymeleaf 会处理并移除的注释,用于在开发时隐藏或临时移除某些代码

在 Thymeleaf 中,# 符号经常用于表示 Thymeleaf 的内置对象或工具方法。这些内置对象提供了一系列的功能,包括处理字符串、执行日期和数字格式化、访问应用上下文、处理列表和集合等。

使用 # 符号的 Thymeleaf 内置对象的说明:

  • 字符串处理
    1.#{...}:用于消息国际化,获取资源文件中的字符串
    2.#strings:提供了各种字符串处理的方法

  • 数字处理
    #numbers:提供了数字格式化的方法

  • 日期处理
    #dates:提供了日期格式化的方法

  • 列表处理
    #lists:提供了处理列表的方法,例如检查列表是否为空、获取列表大小等

  • 集合处理
    #sets:提供了处理集合的方法,例如检查集合是否包含某个元素

  • 选择变量
    # 还可以用于在 th:switchth:case 中表示当前选择的值

  • 表达式工具
    #expr:提供了执行表达式的方法,虽然这在模板中通常不是必需的,但在某些高级用例中可能有用

  • 其他内置对象
    还有其他一些内置对象,如 #ctx 用于访问应用上下文,#locales 用于处理本地化设置等

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/791073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

后端SpringBoot+Mybatis 查询订单数据表奇怪报错加一

排错过程&#xff1a; 看报错意思是SQL语句存在错误&#xff0c;然后使用图形化工具运行这个SQL语句 其实这里稍微细心想一下就能发现问题&#xff0c;但是当时没深入想&#xff0c;就觉得order表前加了数据库名字影响不大&#xff0c;所以感觉SQL语句是没问题的&#xff0c;然…

JavaScript基础代码练习之翻转数组

一、要求将给定数组 [red, green, blue, pink, purple] 的内容反转存放&#xff0c;并将结果输出到控制台。 二、编写代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" cont…

Appium如何自动判断浏览器驱动

问题&#xff1a;有的测试机chrome是这个版本&#xff0c;有的是另一个版本&#xff0c;怎么能让自动判断去跑呢&#xff1f;&#xff1f; 解决办法&#xff1a;使用appium的chromedriverExecutableDir和chromedriverChromeMappingFile 切忌使用chromedriverExecutableDir和c…

19c使用Datapump做数据迁移

环境&#xff1a; 源库目标库IP192.168.37.200192.168.37.201系统版本RedHat 7.9RedHat 7.9数据库版本19.3.0.0.019.3.0.0.0SIDbegtarhostnamebegtar数据量412KB 详细说明&#xff1a;因为只是做练习&#xff0c;这里采用了两个单例19c作为源端和目的端服务器&#xff0c;环境…

PHP在线加密系统网站源码

源码介绍 PHP在线加密系统网站源码&#xff0c;这个是sg的加密,免费可用(目前)并不会收费 源码说明&#xff1a;下载直接上传即可 下载地址 蓝奏云下载&#xff1a;https://wfr.lanzout.com/i6c331togiji

redis-乐观锁Watch使用方法

一 乐观锁Watch介绍 监控 &#xff08;Watch&#xff09;&#xff1a;可用于做乐观锁 悲观锁&#xff1a;很悲观&#xff0c;做什么都会加锁&#xff08;Synchronize关键字就是这样&#xff09;乐观锁&#xff1a;很乐观&#xff0c;认为什么时候都不会出问题&#xff0c;所以不…

Elasticsearch 聚合函数返回空数组|查询返回空内容 rs里有数据

问题场景&#xff1a; 今天用聚合函数想查询出catename不重复列表&#xff0c;类似于Mysql的group by函数。但返回的确是空数组[]&#xff0c;再三确认是有数据的。输出response&#xff1a; {"took":1,"timed_out":false,"_shards":{"tot…

WebKit简单介绍

WebKit是一个开源的浏览器网页排版引擎&#xff0c;起源于苹果公司&#xff0c;最初是为了开发Safari浏览器而创建的。WebKit主要包含两个核心组件&#xff1a;WebCore和JavaScriptCore。 WebCore&#xff1a;主要负责解析HTML文档、样式表&#xff08;CSS&#xff09;以及处理…

【考研数学】0基础网课汇总+资源分享

选老师千万别跟风&#xff01; 考研界里的大咖其实真的不少啊&#xff01;像是汤家凤、张宇、李永乐、武忠祥、王世安、杨超这些老师&#xff0c;都是大神级别的存在&#xff01;他们每个人都有自己独特的教学风格&#xff0c;只要跟着其中任何一个&#xff0c;认真听讲、做好…

[RK3128-LINUX] 关于 OpenGL ES2 实现画图相关问题

问题描述 在SDK中并没有找到有关OpenGL ES2 实现画图或者刷图的Demo程序&#xff0c;那么该功能如何实现呢&#xff1f; 解决方案&#xff1a; 标准api说明可以参考khronos定义&#xff1a;https://registry.khronos.org/ 相关书籍&#xff1a;《OpenGL超级宝典》、《openGL…

增强函数(Augmentation Function)

增强函数&#xff08;Augmentation Function&#xff09;通常用于扩充数据集&#xff0c;通过应用一系列的随机变换来生成新的数据样本。这在机器学习和深度学习中特别有用&#xff0c;因为增加数据的多样性可以帮助模型更好地泛化。下面是一个简单的增强函数的例子&#xff0c…

FFmpeg获取视频详情

话不多说&#xff0c;直接上代码&#xff1a; pom依赖&#xff1a; <!--视频多媒体工具包 包含 FFmpeg、OpenCV--><dependency><groupId>org.bytedeco</groupId><artifactId>javacv-platform</artifactId><version>1.5.3</versi…

linux清理缓存垃圾命令和方法介绍

在Linux系统中&#xff0c;清理缓存和垃圾文件可以通过多种方法完成&#xff0c;这些方法旨在释放磁盘空间、提高系统性能。以下是一些常用的方法&#xff0c;结合了搜索结果中的信息&#xff1a; 1. 使用sync和echo命令清除RAM缓存和交换空间1 清除页面缓存&#xff08;Page …

【c++基础】数池塘(四方向)

说明 农夫约翰的农场可以表示成N*M&#xff08;1≤N、M≤100&#xff09;个方格组成的矩形。由于近日的降雨&#xff0c;在约翰农场上的不同地方形成了池塘。每一个方格或者有积水&#xff08;W&#xff09;或者没有积水&#xff08;.&#xff09;。农夫约翰打算数出他的农场上…

深入理解 Linux 内核链表:C 链表的实用性和优势

深入理解 Linux 内核链表&#xff1a;C 链表的实用性和优势 在 Linux 内核的设计和实现中&#xff0c;链表是一种非常关键的数据结构&#xff0c;尤其是因为它在处理动态数据集合时的高效性和灵活性。本文将深入探讨链表在 Linux 内核中的作用以及内核开发者如何利用 C 语言中…

css 属性值initial、unset、revert

1.initial CSS 关键字 initial 将属性的初始&#xff08;或默认&#xff09;值应用于元素。不应将初始值与浏览器样式表指定的值混淆。它可以应用于任何 CSS 属性。这包括 CSS 简写 all&#xff0c;initial 可用于将所有 CSS 属性恢复到其初始状态。 2.unset CSS 关键字 uns…

【css】使用display:inline-block后,元素间存在4px的间隔

问题&#xff1a;在本地项目中使用【display: inline-block】&#xff0c;元素间存在4px间隔。打包后发布到外网又不存在这个问题了。 归根结底这是一个西文排版的问题&#xff0c;英文有空格作为词分界&#xff0c;而中文则没有。 此时的元素具有文本属性&#xff0c;只要标签…

基于深度学习的肿瘤图像检测系统(网页版+YOLOv8/v7/v6/v5代码+训练数据集)

摘要&#xff1a;在本博客中&#xff0c;我们深入探讨了基于YOLOv8/v7/v6/v5的肿瘤图像检测系统。核心上&#xff0c;我们采用了最新的YOLOv8技术&#xff0c;并将其与YOLOv7、YOLOv6、YOLOv5算法进行了综合整合和性能指标对比分析。我们详细阐述了当前国内外在此领域的研究现状…

python实现UDP服务器

import socket # 创建UDP socket udp_server_socket socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定地址和端口 server_address (localhost, 12000) udp_server_socket.bind(server_address) # 服务器循环 while True: # 接收客户端消息 message, c…

Python机器学习实验 Python 数据分析

1.实验目的 掌握常见数据预处理方法&#xff0c;熟练运用数据分析方法&#xff0c;并掌握 Python 中的 Numpy、 Pandas 模块提供的数据分析方法。 2.实验内容 1. Pandas 基本数据处理 使用 Pandas 模块&#xff0c;完成以下操作。 &#xff08;1&#xff09;创建一个由 0 到 50…