以简单的例子从头开始建spring boot web多模块项目(五)-thymeleaf引擎

继续向里面加,这次是引入thymeleaf渲染引擎。
使用这个引擎的很多,主要是以下几个优点:

  1. Thymeleaf是适用于Web和独立环境的现代服务器端Java模板引擎。
  2. Thymeleaf的主要目标是为您的开发工作流程带来优雅的自然模板 -HTML可以在浏览器中正确显示,也可以作为静态原型工作,从而可以在开发团队中加强协作。
  3. Thymeleaf拥有适用于Spring Framework的模块,与您喜欢的工具的大量集成以及插入您自己的功能的能力。
    步骤:
    1、pom.xml中引入包:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-thymeleaf</artifactId></dependency>

同时确保spring-boot-starter-web这个包已经引入。

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

2、其实默认thymeleaf配置情况下已经可以用了,不过它默认启用了缓存,更适合生产环境,不太适合开发环境,需要关掉。
application.properties文件中,加入配置:

#thymeleaf 缓存设置
spring.thymeleaf.cache=false
spring.thymeleaf.prefix=classpath:/templates/
spring.thymeleaf.encoding=utf-8
spring.thymeleaf.suffix=.html

主要注意的是上面都是默认配置,只有cache=false是修改的。
prefix=classpath:/templates/两边的/都不要漏掉。

3、创建/templates/目录,在resources下。
创建模板文件。
web_1.html 这个包含了一个最简单的text的变量绑定

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8">
<!--  <meta http-equiv="content-type" content="text/html;chatset=UTF-8">--><title>Title</title>
</head>
<body>
<p th:text="${hello}"></p>
</body>
</html>

web_2.html 这个包含了一个List类型变量的绑定,主要是演示遍历循环

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8">
<!--  <meta http-equiv="content-type" content="text/html;chatset=UTF-8">--><title>Title</title>
</head>
<body>
<table border="1" cellspacing="0" cellpadding="0"><tr><td>ID</td><td>Fid</td><td>Fname</td></tr><tr th:each="ware:${warehouses}"><td th:text="${ware.Id}"></td><td th:text="${ware.Fid}"></td><td th:text="${ware.Fname}"></td></tr>
</table>
</body>
</html>

3、编写控制器文件 Demo2Controller.java

package org.rainpet.controller;import org.rainpet.entity.Warehouse;
import org.rainpet.service.WarehouseService;
import org.rainpet.utils.StrUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.servlet.ModelAndView;import javax.servlet.http.HttpServletRequest;
import java.util.LinkedList;
import java.util.List;@Controller
@RequestMapping("/demo2")
public class Demo2Controller {@AutowiredWarehouseService warehouseService;@GetMapping("web1")public String hello(Model model){model.addAttribute("hello","hello welcome");return "web_1";}@GetMapping("web2")public String web2(HttpServletRequest request){String name="note";request.setAttribute("hello",name);return "web_1";}@GetMapping("web3")public ModelAndView web3(){String name="note3";ModelAndView modelAndView=new ModelAndView();modelAndView.addObject("name",name);List<Warehouse> warehouseList=new LinkedList<>();Warehouse warehouse=new Warehouse();warehouse.setId(1);warehouse.setFid("01");warehouse.setFname("测试01");warehouseList.add(warehouse);modelAndView.addObject("warehouses",warehouseList);modelAndView.addObject("warehouse",warehouse);modelAndView.setViewName("web_2");return modelAndView;}
}

需要注意的问题:
① thymeleaf需要配合@Controller 注解使用,一定不能使用@RestController注解
② LinkedList 对象需要java7及以上支持,需要修改项目的java兼容性,我是修改到了java8。
需要修改:Project Structure中项目的SDK、language level;
在这里插入图片描述

各个模块的Language Level、Dependencies中的Model SDK;
在这里插入图片描述
在这里插入图片描述

设置中的Build.Execution,Deployment中Compiler中,java Compiler的各个模块字节码的version,均改为8。在这里插入图片描述

重新编译,同时在父项目中maven中执行install操作方可。
在这里插入图片描述
不然,可能会出现莫名错误:Could not resolve dependencies for project org.rainpet:Web:jar:1.0-SNAPSHOT: Failed to collect dependencies

4、重新编译,运行,打开页面:
http://localhost:8081/demo2/web1
在这里插入图片描述
http://localhost:8081/demo2/web2
在这里插入图片描述
http://localhost:8081/demo2/web3
在这里插入图片描述
到此,项目已经跑起来了。

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

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

相关文章

Vue3加vite使用Cesium绘制图形

Vue3加vite使用Cesium绘制图形 1、项目开发准备 Node版本&#xff1a;16.20.2 1.1创建一个新的工程&#xff1a;my-cesium-app npm create vitelatest my-cesium-app – --template vue1.2 安装Element Plus npm install element-plus --save // main.js import ElementPl…

【STM32】看门狗

看门狗&#xff0c;还没有别的地方用上&#xff0c;暂时还不清楚在实际应用中最多的场景是什么&#xff0c;我感觉是用来强制重启系统。 大部分图片来源&#xff1a;正点原子HAL库教程 专栏目录&#xff1a;记录自己的嵌入式学习之路-CSDN博客 目录 1 应用场景 1.1 解决…

Langchain Memory组件深度剖析:从对话基础到高级链式应用

文章目录 前言一、Langchain memory 记忆1.Memory 组件基本介绍2.Memory 组件的类型1.ChatMessageHistory2.ConversationBufferMemory3.ConversationBufferWindowMemory4.ConversationEntityMemory5.ConversationKGMemory6.ConversationSummaryMemory 二、长时记忆1.简单介绍2.…

解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题

文章目录 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插件无法选择串口设备节点问题不识别CH340/CH341报错解决办法升级驱动编译安装 卸载brltty程序 vscode espidf插件无法选择串口设备节点问题解决办法编译安装 解决ubuntu22.04无法识别CH340/CH341和vscode espidf插…

C#开发中ImageComboBox控件数据源实时变换

在C#开发中&#xff0c;我们如何将控件的数据源实时变换&#xff0c;当然我们可以在窗口实例化的时候指定固定的数据源&#xff0c;但是这样对于用户来说数据源永远固定&#xff0c;并不利于我们对于用户的数据存储&#xff0c;优化用户的操作&#xff0c;遇到这种问题&#xf…

Flutter ListView滑动

在Flutter中&#xff0c;ScrollController可以精确地控制和管理滚动行为。通过ScrollController&#xff0c;可以监听滚动的位置、速度&#xff0c;甚至可以在用户滚动时触发自定义的动作。此外&#xff0c;ScrollController还提供了对滚动位置的直接控制&#xff0c;可以编程地…

DRF——请求的封装与版本管理

文章目录 django restframework1. 快速上手2. 请求数据的封装3. 版本管理3.1 URL的GET参数传递&#xff08;*&#xff09;3.2 URL路径传递&#xff08;*&#xff09;3.3 请求头传递3.4 二级域名传递3.5 路由的namespace传递 小结 django restframework 快速上手请求的封装版本…

科大讯飞刘聪:大模型加持,人形机器人将跨越三大瓶颈

2024年&#xff0c;AI大模型成为机器人产业新的加速器。 今年3月&#xff0c;ChatGPT4加持的机器人Figure01向外界展示了大模型赋能人形机器人的巨大潜力。Figure01能理解周围环境&#xff0c;流畅地与人类交谈&#xff0c;理解人类的需求并完成具体行动&#xff0c;包括给人类…

虚幻5|AI视力系统,听力系统,预测系统(2)听力系统

虚幻5|AI视力系统&#xff0c;听力系统&#xff0c;预测系统&#xff08;1&#xff09;视力系统-CSDN博客 一&#xff0c;把之前的听力系统&#xff0c;折叠成函数&#xff0c;复制粘贴一份改名为听力系统 1.小个体修改如下&#xff0c;把之前的视力系统改成听力系统 2.整体修…

隐私指纹浏览器产品系列 —— 浏览器指纹 中(三)

1.引言 在上一篇文章中&#xff0c;我们聊到了最老牌的浏览器指纹检测站——BrowserLeaks。BrowserLeaks曾经是浏览器指纹检测的权威&#xff0c;但它似乎更像是一本老旧的工具书&#xff0c;只能呆板告诉你浏览器的指纹值&#xff0c;并对比不同浏览器的指纹差异。 今天&…

C语言 之 浮点数在内存中的存储 详细讲解

文章目录 浮点数浮点数的存储浮点数的存储浮点数的读取例题 浮点数 常见的浮点数&#xff1a;3.14159、1E10&#xff08;表示1*10^10&#xff09;等 浮点数家族包括&#xff1a; float、double、long double 类型。 浮点数表示的范围在float.h 中有定义 浮点数的存储 浮点数…

C++研发笔记1——github注册文档

1、第一步&#xff1a;登录网站 GitHub: Let’s build from here GitHub 最新跳转页面如下&#xff1a; 2、选择“sign up”进行注册&#xff0c;并填写设置账户信息 3、创建账户成功之后需要进行再次登录 4、根据实际情况填写个人状态信息 登录完成后页面网站&#xff1a; 5…

手写SpringAOP

一、非注解式简易版AOP 整体流程 1.1 代码 public class Test {public static void main(String[] args){// Aop代理工厂DefaultAopProxyFactory factory new DefaultAopProxyFactory();// 测试对象AOPDemoImpl demo new AOPDemoImpl();// 支撑类&#xff1a;用于存放目标…

配置策略路由实战 附带基础网络知识

背景 作为一个软件开发人员&#xff0c;不可能做到只负责业务开发工作&#xff0c;一旦功能上线或者系统切换就会遇到非常多考验开发人员个人能力的场景&#xff0c;网络调整就是非常重要的一个方面&#xff0c;如果你在系统上线的过程中无法处理一些简单的网络问题或者听不懂…

文件包含漏洞(1)

目录 PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 Example 2&#xff1a; 文件内容绕过 php://filer zip:// PHP伪协议 php://input Example 1&#xff1a; 造成任意代码执行 搭建环境 <meta charset"utf8"> <?php error_repo…

Modern C++——不准确“类型声明”引发的非必要性能损耗

大纲 案例代码地址 C是一种强类型语言。我们在编码时就需要明确指出每个变量的类型&#xff0c;进而让编译器可以正确的编译。看似C编译器比其他弱类型语言的编译器要死板&#xff0c;实则它也做了很多“隐藏”的操作。它会在尝试针对一些非预期类型进行相应转换&#xff0c;以…

QT Quick QML 网络助手——TCP客户端

GitHub 源码: QmlLearningPro &#xff0c;选择子工程 Nettools.pro QML 其它文章请点击这里: QT QUICK QML 学习笔记 ● 运行效果&#xff1a; 左侧为常用的网络调试工具&#xff0c;右侧为本项目 UI 效果&#xff0c;前端使用 QML &#xff0c;后端使用C &#xff…

【文档智能 RAG】浅看开源的同质化的文档解析框架-Docling

前言 RAG的兴起&#xff0c;越来越多的人开始关注文档结构化解析的效果&#xff0c;这个赛道变得非常的同质化。 关于文档智能解析过程中的每个技术环节的技术点&#xff0c;前期文章详细介绍了很多内容&#xff1a; 下面我们简单的看看Docling这个PDF文档解析框架里面都有什…

GPIO(通用输入/输出)、中断(hal库)

目录 GPIO&#xff08;通用输入/输出)&#xff08;hal库&#xff09; GPIO工作模式 推挽输出&#xff08;Push-Pull Output&#xff09; 开漏输出&#xff08;Open-Drain Output&#xff09; 复用推挽输出&#xff08;Alternate Function Push-Pull Output&#xff09; 复…

在Ubuntu 22.04测试ebpf-go入门例子

文章目录 1、eBPF-Go依赖1.1 Ubuntu安装ssh server1.2 安装go1.3 安装llvm和clang1.4 安装libbpf和Linux kernel headers 2 编写eBPF C程序3 使用bpf2go编译eBPF C程序4 编写Go程序5 编译运行Go应用程序 eBPF-Go是一个使用eBPF的Go库。它不依赖于C、libbpf或除标准库之外的任何…