最新要闻
- 天天观速讯丨放假5天!大学生已经在为五一做准备了
- 外出告别“板砖”电源!联想拯救者推出140W氮化镓适配器
- 4799元 创维推出新款G60 4K显示器:150Hz高刷 96W反向充电
- 即时焦点:2023载人航天飞行任务标识正式发布:中国神话神兽鲲元素
- 全国车企疯狂降价!吉利汽车CEO:吉利不打价格战
- 热讯:华硕发布新款Vivobook Go 14/15 OLED笔记本:高配酷睿i3-N305
- 天天观速讯丨真我GT Neo5 1TB存储网友用掉了500多G:直呼“真香”
- 全球视讯!Win12及DX13要来了?微软预告DirectX全新功能
- 通信能力是5G的10倍!全球17家运营商发布6G白皮书:预计2030商用
- 熬夜伤不起!警惕睡眠质量受电子设备影响
- 个人交340单位交680退休能拿多少?主要看个人缴纳的部分
- 焦点速讯:匹克态极速浪跑鞋99元抄底:门店299元
- 天天热文:女子公园租电动车3个多小时扣466元 运营方:上海价格都是这
- 焦点滚动:别羡慕了!经常不分场合秒睡可能是种病:得看医生
- 全球观速讯丨宁德时代麒麟电池已量产 同体积比特斯拉电池电量高13%
- 世界新消息丨省的都是钱 长安汽车推“百亿补贴”:不到11万可买CS75 PLUS
手机
iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- iphone11大小尺寸是多少?苹果iPhone11和iPhone13的区别是什么?
- 警方通报辅警执法直播中被撞飞:犯罪嫌疑人已投案
- 男子被关545天申国赔:获赔18万多 驳回精神抚慰金
- 3天内26名本土感染者,辽宁确诊人数已超安徽
- 广西柳州一男子因纠纷杀害三人后自首
- 洱海坠机4名机组人员被批准为烈士 数千干部群众悼念
家电
世界看点:day08-2-Thymeleaf
服务器渲染技术-Thymeleaf
1.基本介绍
官方在线文档:Read online 文档下载:Thymeleaf 3.1 PDF, EPUB, MOBI
Thymeleaf 是什么
Thymeleaf是一个现代的服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本
(资料图片)
Thymeleaf 是一个跟 Velocity、FreeMarker 类似的模板引擎,可完全替代 JSP
Thymeleaf 是一个 Java 类库,是一个xml/ xhtml/ html5的模板引擎,可以作为 mvc 的 web 应用的 view 层
Thymeleaf 的优点
- 实现 JSTL、OGNL 表达式效果,语法类似,上手快
- Thymeleaf 模板页面无需服务器渲染,也可以被浏览器运行,页面简洁
- SpringBoot 支持 FreeMarker、Thymeleaf、Veocity
Thymeleaf 的缺点
- Thymeleaf 并不是一个高性能的引擎,适用于单体应用
- 如果要做一个高并发的应用,选择前后分离更好,比如 Vue + SpringBoot
2.Thymeleaf机制
Thymeleaf 是服务器渲染技术,页面数据是在服务端进行渲染的
例如:某个页面被请求,其中有一段Thymeleaf代码,则 thymeleaf 模板引擎完成处理之后(在服务端完成),才会将页面结果返回。因此使用Thymeleaf,并不是前后端分离。
3.语法
3.1表达式
1.表达式一览
表达式名称 | 语法 | 用途 |
---|---|---|
变量取值 | ${...} | 获取请求域、session域、对象等值 |
选择变量 | *{...} | 获取上下文对象值 |
消息 | #{...} | 获取国际化等值 |
链接 | @{...} | 生成链接 |
片段表达式 | ~{...} | jsp:include 作用,引入公共页面片段 |
2.字面量
文本值:"jack", "hello", ...
数字:10, 5, 36.8, ...
布尔值:true,false
空值:null
变量:name, age, ...(变量名不能有空格)
3.文本操作
字符串拼接:+
变量替换:|age=${age}|
3.2运算符
1.数学运算
运算符:+,-,*,/,%
2.布尔运算
运算符:and,or
一元运算:!,not
3.比较运算
比较:>,<,>=,<=(gt,lt,ge,le)
等式:==,!=(eq,ne)
4.条件运算
If-then:(if)?(then)
If-then-else:(if)?(then):(else)
Default:(value)?:(defaultvalue)
3.3th属性
html有的属性,Thymeleaf基本都有,而常用的属性大概有七八个。其中th属性执行的优先级从1~8,数字越小优先级越高。
th:fragment
声明代码块,方便被 th:insert 引用。优先级为 order=8
th:text
设置当前元素的文本内容,相同功能的还有 th:utext,两者的区别在于前者不会转义 html 标签,而后者会。优先级为 order=7
th:value
设置当前元素的 value 值,类似修改指定属性的还有 th:src,th:href。优先级为 order=6
th:attr
修改任意属性,实际开发中使用较少,因为有丰富的其他th属性帮忙,类似的还有th:attrappend,th:attrprepend。优先级为 order=5
th:object
声明变量,一般和 *{} 一起配合使用,达到偷懒效果。优先级 order=4
th:if
条件判断,类似的还有 th:unless,th:switch,th:case。优先级为 order=3
th:each
遍历循环元素,和 th:text 或 th:value 一起使用。注意该属性修饰的标签位置。优先级为 order=2
th:insert
代码块引入,类似的还有 th:replace,th:include。三者的区别较大,若使用不当会破坏html结构,当用于公共代码块提取的场景,优先级为 order=1
3.4迭代
教程:使用百里香叶 (thymeleaf.org)
在前端页面中,总是出现需要遍历集合中的元素以展示所有信息的场景。Thymeleaf标准方言为我们提供了一个有用的属性:th:each。
假设后台控制器添加了一个商品列表的属性 prods。然后,我们使用 th:each在模板中使用来遍历产品列表:
Good Thymes Virtual Grocery Product list
NAME PRICE IN STOCK Onions 2.41 yes
prod : ${prods} 属性的含义为:循环 \({prods} 属性的每一个元素。\){prods} 为被迭代变量,prod 为迭代变量,即当前循环的元素。
需要注意的是,prod 为迭代变量的作用域为 例如: 这将创建一个指向评论页面(带有 URL )的链接,并将参数设置为产品的参数,但前提是产品有任何评论。 还有一种方法可以使用 Java 中的等效开关结构有条件地显示内容:switch-case-default User is an administrator User is a manager User is some other thing (1)创建 SpringBoot 项目,引入基本的库文件 (2)创建 login.html 和 manage.html 和静态图片到指定目录(templates目录,该目录不能直接访问) login.html manage.html (3)Javabean Admin.java User.java (4)控制器Controller IndexController AdminController (5)启动类 (6)测试 把前面接收参数相关注解、自定义转换器、处理JSON、内容协商相关代码和案例过一遍 将Thymeleaf用户管理改为妖怪列表,字段做相应的改变,进行练习
关键词:
服务器渲染技术-Thymeleaf1 基本介绍官方在线文档:Readonline文档下载:Thymeleaf3 1PDF,EPUB,MOBIThymeleaf是什么Thymele usingOpenCvSharp;usingNAudio Wave; 定义视频和音频的参数intfps=30;SizevideoSize=newSize(640,480元素,可用于其内部标记 。 3.5条件运算
view
/product/comments
prodId
id
3.6注意事项
xmlns:th="http://www.thymeleaf.org"
4.综合案例
4.1代码实现
用户登录
管理雇员
id name age pwd email a b c d e package com.li.thymeleaf.bean;import lombok.Data;/** * @author 李 * @version 1.0 */@Datapublic class Admin { private String name; private String password;}
package com.li.thymeleaf.bean;import lombok.AllArgsConstructor;import lombok.Data;import lombok.NoArgsConstructor;/** * @author 李 * @version 1.0 */@Data@AllArgsConstructor@NoArgsConstructorpublic class User { private Integer id; private String name; private Integer age; private String password; private String email;}
package com.li.thymeleaf.controller;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.GetMapping;/** * @author 李 * @version 1.0 */@Controllerpublic class IndexController { //编写方法,转发到登录页 @GetMapping(value = {"/", "/login"}) public String login() { //因为我们引入了starter-thymeleaf,这里会直接 //使用视图解析到thymeleaf模板文件下的adminLogin.html return "adminLogin"; }}
package com.li.thymeleaf.controller;import com.li.thymeleaf.bean.Admin;import com.li.thymeleaf.bean.User;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.util.StringUtils;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.PostMapping;import javax.servlet.http.HttpSession;import java.util.ArrayList;import java.util.List;/** * @author 李 * @version 1.0 */@Controllerpublic class AdminController { /** * 响应用户登录请求 * * @param admin 自定义对象参数 * @param session 将获取的admin信息放入session中(登录成功) * @param model model的数据会自动放入request域中传给下一个页面(登录失败) * @return */ @PostMapping("/login")//从请求方式区分,不会冲突 public String login(Admin admin, HttpSession session, Model model) { //验证用户是否合法 if (StringUtils.hasText(admin.getName()) && "666".equals(admin.getPassword())) {//合法 //将登陆用户保存到session中 session.setAttribute("loginAdmin", admin); //应使用重定向(用请求转发刷新页面会重复提交表单),这里的重定向是到mainPage方法,而不是直接到页面。 return "redirect:manage.html"; } else {//不合法,返回重新登录 model.addAttribute("msg", "用户名或密码错误!"); return "adminLogin"; } } //处理用户请求到manage.html @GetMapping("/manage.html") public String mainPage(Model model, HttpSession session) { //先校验(这里暂时使用session验证,后面可以统一使用拦截器) Object loginAdmin = session.getAttribute("loginAdmin"); if (loginAdmin != null) {//说明登陆过 //模拟用户数据 List
package com.li.thymeleaf;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;/** * @author 李 * @version 1.0 */@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); }}
4.2练习
世界看点:day08-2-Thymeleaf
世界快看:使用OpenCVSharp和NAudio库在C#中录制带有声音的视频并保存下来的代码
数据库系统
世界看点:day08-2-Thymeleaf
世界快看:使用OpenCVSharp和NAudio库在C#中录制带有声音的视频并保存下来的代码
焦点快报!债市日报:3月21日
天天观速讯丨放假5天!大学生已经在为五一做准备了
外出告别“板砖”电源!联想拯救者推出140W氮化镓适配器
4799元 创维推出新款G60 4K显示器:150Hz高刷 96W反向充电
即时焦点:2023载人航天飞行任务标识正式发布:中国神话神兽鲲元素
全国车企疯狂降价!吉利汽车CEO:吉利不打价格战
每日消息!微服务与rpc/grpc
全球观热点:第132篇:npm第一次使用自己的包(package-lock.json、package.json文件作用说明)
精彩看点:【Visual Leak Detector】在 QT 中使用 VLD(方式一)
热讯:华硕发布新款Vivobook Go 14/15 OLED笔记本:高配酷睿i3-N305
天天观速讯丨真我GT Neo5 1TB存储网友用掉了500多G:直呼“真香”
全球视讯!Win12及DX13要来了?微软预告DirectX全新功能
通信能力是5G的10倍!全球17家运营商发布6G白皮书:预计2030商用
熬夜伤不起!警惕睡眠质量受电子设备影响
记录--前端加载超大图片(100M以上)实现秒开解决方案
关于“堆”题的总体思路
焦点速讯:地表最强AI,GPT-4专治各种不服
个人交340单位交680退休能拿多少?主要看个人缴纳的部分
焦点速讯:匹克态极速浪跑鞋99元抄底:门店299元
天天热文:女子公园租电动车3个多小时扣466元 运营方:上海价格都是这
焦点滚动:别羡慕了!经常不分场合秒睡可能是种病:得看医生
全球观速讯丨宁德时代麒麟电池已量产 同体积比特斯拉电池电量高13%
世界新消息丨省的都是钱 长安汽车推“百亿补贴”:不到11万可买CS75 PLUS
【Visual Leak Detector】安装 VLD
世界速递!三主摄时代来了!OPPO Find X6 Pro大漠银月图赏
全球看点:49dB降噪行业第一!OPPO Enco Free3图赏
1949元 ROG魔方幻“月曜白”路由器今晚开售:三频万兆速率
今热点:微软Bing上线在线绘图功能:文字生成图片 仅支持英文
天天快资讯:安全性远超燃油车!特斯拉发布调查报告:是美国平均水平7.4倍
环球今头条!DVWA-XSS(Reflected)
环球观焦点:关于基于AWS-Cli的方式对EC2及AMI资源批量添加或者删除tag的方法
每日观点:为什么Tomcat架构要这么设计?这篇文章告诉你答案!
全球微动态丨记录监控摄像头的接入过程及web端播放
全球快资讯丨narak靶机
当前快播:新农股份: 2022年度业绩快报
环球观天下!OPPO Find X6 Pro搭载三星E6屏:亮度高达2500nit、支持Pro XDR显示
焦点滚动:用到安卓17没问题!OPPO宣布Find X系列将支持4次大版本更新
449元-6999元!OPPO Find X6发布会四大新品一图看懂
全球速递!报告:2022年中国每四辆新车就有一辆电动车 比亚迪无敌
全球焦点!为什么不建议用redis做消息队列
世界今亮点!【数位DP】计数问题
前端设计模式——状态模式
每日讯息!关于 Vue 列表渲染 key 绑定 index 的性能问题
每日观察!黄金时间·千海金:避险情绪推升金价 但本周的美联储议息会议依然关键
环球观点:杜绝虚标!哈趣投影率先启用中国CVIA亮度标准:成单片式LCD领头羊
OPPO Find N2系列赢麻了!连续三个月折叠屏销量第一
天天速看:自动洗烘拖布 石头自清洁扫拖机器人P10图赏
道奇纯燃油谢幕之作!挑战者SRT恶魔170发布:V8机械增压马力超千匹
简单讲透Mac环境下多版本python的环境变量设置,仅对小白生效
视点!"error LNK2019: 无法解析的外部符号"原因分析
今头条!IDEA Rebuild项目错误:Information:java: java.lang.AssertionError: Value of x -1
对斗破苍穹进行python文本分析
实时焦点:VsCode 常用好用插件/配置+开发Vue 必装的插件
环球简讯:爵士力克国王将湖人挤出附加赛区 迷失盐湖城小萨准三双数据难掩低迷状态
入睡妙招!研究表明穿袜子睡觉更助眠
全球热消息:AMD Zen4霸气!移动版12核心解锁130W 直追170W桌面12核心
"周杰伦演唱会门票"登顶微博热搜 14万张秒售罄
dnf机械牛和悲鸣图在哪里?DNF机械牛和悲鸣的门票分别是什么?
雨过天晴一键还原怎么用?怎么删除雨过天晴一键还原?
OA对话框打不开是怎么回事?OA对话框怎么变成普通对话框?
今日最新!脚本编写的一个通用框架
天天速讯:编写高质量c#代码的20个建议
面试常考:C#用两个线程交替打印1-100的五种方法
全球新资讯:Paramiko_Linux
【全球独家】跟着字节AB工具DataTester,5步开启一个实验
英雄联盟自动关闭是什么意思?英雄联盟自动关闭怎么解决?
冒险岛的时空裂缝是什么?冒险岛怎么提升面板?
全球热推荐:今天春分白昼长了!全国春日地图出炉 看看春天到哪了
天天热议:汽车界“海底捞服务”!蔚来2023无忧服务发布:11600元/年
世界聚焦:重庆不再实行旧车置换:直接给予新车补贴 总计达3000万
世界报道:跨界做智能手表 比亚迪回应:消息属实 4月上新
对标《原神》!二次元开放世界游戏《鸣潮》开启测试招募
热点!如果设备不支持vulkan,就用swiftshader,否则就加载系统的vulkan的正确姿势(让程序能够智能的在vulkan-1.dll和libvk_s
【全球快播报】springboot使用easyExcel导出Excel表格以及LocalDateTime时间类型转换问题
《前端serverless 面向全栈的无服务器架构实战》读书笔记
每日视点!海关总署:2月下旬以来我国出口用箱量持续增长
国产纯电跑车前途K50美国秽土转生:换了名称、LOGO还没变
全球最新:40万级领先行业两代 赵长江:腾势N7月销量将轻松破万 抢夺BBA用户
【全球速看料】沙县小吃旗舰店包间最低消费300元 网友:吃的完吗?
全球头条:英国小镇被巨型老鼠入侵:像猫一样大 悬崖都要被挖塌了
OpenGL 图像 lookup 色彩调整
天天时讯:剑指 Offer 07. 重建二叉树(java解题)
为什么Redis不直接使用C语言的字符串?看完直接吊打面试官!
天天观天下!广东人睡觉时间全国最晚:“打工人”平均睡眠时长7.5小时
一根USB线就能偷走韩系车!现代、起亚已开始免费送车主方向盘锁
今日关注:再不发力就晚了!新一代奥迪Q5效果图曝光:内外大变革
当前时讯:沙尘暴黄色预警:北方超10省将迎来大范围沙尘天气
环球热点评!昔日巨头彻底退场!爱普生宣布所有相机明年终止官方服务
环球关注:论文解读TCPN
西部证券:3月20日融资买入1459.71万元,融资融券余额12.72亿元
环球速讯:中国罐头在海外多国热销:成为香饽饽
天天讯息:大反转!南京大学团队推翻美室温超导技术 复刻实验没发现超导现象
天天速看:又一致命真菌爆发:已遍布美国一半以上的州
天天微动态丨OPPO Find X6系列外观公布:拼接设计、后摄巨大
比亚迪汉唐冠军版发布会高能金句感受下 合资燃油车瑟瑟发抖
MAUI Blazor 加载本地图片的解决方案
每日热点:朴素系统优化思维的实践