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

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

选老师千万别跟风&#xff01; 考研界里的大咖其实真的不少啊&#xff01;像是汤家凤、张宇、李永乐、武忠祥、王世安、杨超这些老师&#xff0c;都是大神级别的存在&#xff01;他们每个人都有自己独特的教学风格&#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 …

【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机器学习实验 Python 数据分析

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

Ai音乐大师演示(支持H5、小程序)独立部署源码

Ai音乐大师演示&#xff08;支持H5、小程序&#xff09;独立部署源码

政安晨:【Keras机器学习实践要点】(十五)—— KerasTuner 简述

目录 导言 调整模型结构 定义搜索空间 开始搜索 查询结果 重新训练模型 调整模型训练 调整数据预处理 重新训练模型 指定调整目标 以内置指标为目标 以自定义指标为目标 调整端到端工作流程 将 Keras 代码分开 政安晨的个人主页&#xff1a;政安晨 欢迎 &#x1…

React 入门

一、官网地址 英文官网: https://reactjs.org/中文官网: https://react.docschina.org/ 二、React 特点 声明式编码组件化编码React Native 编写原生应用高效&#xff08;优秀的 Diffing 算法&#xff09;高效的原因&#xff1a;1.使用虚拟DOM&#xff0c;不总是直接操作页面…

vultr ubuntu 服务器远程桌面安装及连接

一. 概述 vultr 上开启一个linux服务器&#xff0c;都是以终端形式给出的&#xff0c;默认不带 ui 桌面的&#xff0c;那其实对于想使用服务器上浏览器时的情形不是很好。那有没有方法在远程服务器安装桌面&#xff0c;然后原程使用呢&#xff1f;至少ubuntu的服务器是有的&am…

搜索--找出克隆二叉树中的相同节点

题目描述 给你两棵二叉树&#xff0c;原始树 original 和克隆树 cloned&#xff0c;以及一个位于原始树 original 中的目标节点 target。 其中&#xff0c;克隆树 cloned 是原始树 original 的一个 副本 。 请找出在树 cloned 中&#xff0c;与 target 相同 的节点&#xff…

Successive Convex Approximation算法的学习笔记

文章目录 一、代码debug二、原理 本文主要参考了CSDN上的 另一篇文章&#xff0c;但规范了公式的推导过程和修缮了部分代码 一、代码debug 首先&#xff0c;我们将所有的代码放到MATLAB中&#xff0c;很快在命令行中出现了错误信息 很显然有问题&#xff0c;但是我不知道发生…

redis 性能管理

一、查看 redis 内存使用 info memory 1&#xff0c; 进入 redis 查看 2&#xff0c; redis 外查看 二 内存碎片率 1&#xff0c;used_memory_rss 表示该进程所占物理内存的大小&#xff0c;即为操作系统分配给 Redis 实例的内存大小。 2&#xff0c;used_memory Redis …

【智能算法】猎豹优化器(CO)原理及实现

目录 1.背景2.算法原理2.1算法思想2.2算法过程 3.结果展示4.参考文献 1.背景 2022年&#xff0c;MA Akbari等人受到自然界中猎豹捕猎行为启发&#xff0c;提出了猎豹优化器&#xff08;The Cheetah Optimizer&#xff0c;CO&#xff09;。 2.算法原理 2.1算法思想 CO法对猎…

机器学习的模型校准

背景知识 之前一直没了解过模型校准是什么东西&#xff0c;最近上班业务需要看了一下&#xff1a; 模型校准是指对分类模型进行修正以提高其概率预测的准确性。在分类模型中&#xff0c;预测结果通常以类别标签形式呈现&#xff08;例如&#xff0c;0或1&#xff09;&#xf…