服务器渲染技术-->Thymeleaf
目录
一.基本介绍
1.Thymeleaf 是什么
2.Thymeleaf 的优点
3. Thymeleaf 的缺点
二.Thymeleaf 机制说明
三.Thymeleaf 语法
1. 表达式
1. 表达式一览
2. 字面量
3. 文本操作
2.运算符
1. 数学运算
2. 布尔运算
3. 比较运算
4. 条件运算
3.th 属性
4.迭代
5.条件运算
6.使用 Thymeleaf -th 属性需要注意点
四.Thymeleaf 综合案例
1.需求说明
2.需求说明
3.代码实现
一.基本介绍
1.Thymeleaf 是什么
2.Thymeleaf 的优点
3. Thymeleaf 的缺点
二.Thymeleaf 机制说明
![](/assets/blank.gif)
3. 因此使用了 Thymeleaf , 并不是前后端分离
三.Thymeleaf 语法
1. 表达式
1. 表达式一览
表达式名字
|
语法
|
用途
|
变量取值 |
${...}
|
获取请求域、session 域、对象等值
|
选择变量 |
*{...}
|
获取上下文对象值
|
消息 |
#{...}
|
获取国际化等值
|
链接 |
@{...}
|
生成链接
|
片段表达式 |
~{...}
|
jsp:include 作用,引入公共页面片段
|
2. 字面量
3. 文本操作
2.运算符
1. 数学运算
2. 布尔运算
3. 比较运算
4. 条件运算
3.th 属性
● th:text :设置当前元素的文本内容,相同功能的还有 th:utext ,两者的区别在于前者不会转义 html 标签,后者会。优先级不高: order=7● th:value :设置当前元素的 value 值,类似修改指定属性的还有 th:src , th:href 。优先级不高: order=6● th:each :遍历循环元素,和 th:text 或 th:value 一起使用。注意该属性修饰的标签位置,详细往后看。优先级很高: order=2● th:if :条件判断,类似的还有 th:unless , th:switch , th:case 。优先级较高: order=3● th:insert :代码块引入,类似的还有 th:replace , th:include ,三者的区别较大,若使用不恰当会破坏 html 结构,常用于公共代码块提取的场景。优先级最高: order=1● th:fragment :定义代码块,方便被 th:insert 引用。优先级最低: order=8● th:object :声明变量,一般和 *{} 一起配合使用,达到偷懒的效果。优先级一般:order=4● th:attr :修改任意属性,实际开发中用的较少,因为有丰富的其他 th 属性帮忙,类似的还有 th:attrappend , th:attrprepend 。优先级一般: order=5
4.迭代
![](/assets/blank.gif)
5.条件运算
6.使用 Thymeleaf -th 属性需要注意点
四.Thymeleaf 综合案例
1.需求说明
![](/assets/blank.gif)
2.需求说明
![](/assets/blank.gif)
3.代码实现
![](/assets/blank.gif)
3. 引入 starter-Thymeleaf , 项目会自动完成配置, 程序员按照规则开发即可
![](/assets/blank.gif)
============login.html==============
<!DOCTYPE html>
<head><meta charset="UTF-8"><title>login</title>
</head>
<body bgcolor="#CED3FE">
<hr/>
<div style="text-align: center"><h1>用户登陆</h1><form action="#" method="post"><label style="color: red"></label><br/>用户名:<input type="text" style="width:150px" name="name"/><br/><br/>密 码 :<input type="password" style="width:150px" name="password"/><br/><br/><input type="submit" value="登录"/><input type="reset" value="重新填写"/></form>
</div>
<hr/>
<img src="data:images/logo.png"/>
</body>
</html>
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>管理后台</title>
</head>
<body bgcolor="#CED3FE">
<img src="data:images/1.GIF"/>
<a href='#'>返回管理界面</a> <a href='#'>安全退出</a> 欢迎您:XXX
<hr/>
<div style="text-align: center"><h1>管理雇员~</h1><table border="1px" cellspacing="0" bordercolor="green" style="width:800px;margin:
auto"><tr bgcolor="pink"><td>id</td><td>name</td><td>pwd</td><td>email</td><td>job</td><td>salary</td></tr><tr><td>a</td><td>b</td><td>c</td><td>d</td><td>e</td><td>f</td></tr></table><br/>
</div>
<hr/>
<img src="data:images/logo.png"/>
</body>
</html>
@Data
public class Admin {private String name;private String password;
}
2.bean/User.java
@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private Integer id;private String name;private String password;private Integer age;private String email;
}
3.controller/IndexController.java 默认进入登录页面
@Controller
public class IndexController {//编写方法,转发到登录页面@GetMapping(value = {"/", "/login"})public String login() {/*** 解读* 1. 因为我们引入了starter-thymeleaf* 2. 这里就会直接使用视图解析到 thymeleaf下的模板文件adminLogin.html*/return "adminLogin";}
}
4.controller/AdminController.java 处理登录请求 完成测试
@Controller
@Slf4j
public class AdminController {//响应用户的登录请求@PostMapping("/login")public String login(Admin admin, HttpSession session, Model model) {//验证用户是否合法if (StringUtils.hasText(admin.getName()) && "666".equals(admin.getPassword())) {//将登录用户保存到sessionsession.setAttribute("loginAdmin", admin);//合法, 重定向到manage.html//请小伙伴回忆,java web, 不使用请求转发是防止刷新页面会重复提交//这里老师为什么是写的 manage.html, 因为这样可以更加明确的表示到哪个页面//manage.html表示要去找 方法的映射路径为 manage.htmlreturn "redirect:/manage.html";} else {//不合法,就重新登录, 请求转发model.addAttribute("msg", "账号/用户错误");return "adminLogin";}}//处理用户的请求到 manage.html@GetMapping("/manage.html")public String mainPage(Model model, HttpSession session) {//这里老师暂时使用在方法验证,后面我们统一使用拦截器来验证log.info("进入mainPage()");//可以这里集合-模拟用户数据, 放入到request域中,并显示ArrayList<User> users = new ArrayList<>();users.add(new User(1, "关羽~", "666666", 20, "gy@sohu.com"));users.add(new User(2, "张飞", "666666", 30, "zf@sohu.com"));users.add(new User(3, "赵云", "666666", 22, "zy@sohu.com"));users.add(new User(4, "马超", "666666", 28, "mc@sohu.com"));users.add(new User(5, "黄忠", "666666", 50, "hz@sohu.com"));//将数据放入到request域model.addAttribute("users", users);return "manage"; //这里才是我们的视图解析到 /templates/manage.html//Object loginAdmin = session.getAttribute("loginAdmin");//if(null != loginAdmin) {//说明成功登录过// //可以这里集合-模拟用户数据, 放入到request域中,并显示// ArrayList<User> users = new ArrayList<>();// users.add(new User(1, "关羽~", "666666", 20, "gy@sohu.com"));// users.add(new User(2, "张飞", "666666", 30, "zf@sohu.com"));// users.add(new User(3, "赵云", "666666", 22, "zy@sohu.com"));// users.add(new User(4, "马超", "666666", 28, "mc@sohu.com"));// users.add(new User(5, "黄忠", "666666", 50, "hz@sohu.com"));//// //将数据放入到request域// model.addAttribute("users", users);//// return "manage"; //这里才是我们的视图解析到 /templates/manage.html//} else {// //这里就返回登录页,并给出提示// model.addAttribute("msg","你没有登录/请登录");// return "adminLogin";//请求转发到adminLogin.html//}}
}
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>管理后台</title>
</head>
<body bgcolor="#CED3FE">
<img src="data:images/1.GIF"/>
<a href='#'> 返 回 管 理 界 面 </a> <a href='#' th:href="@{/}"> 安 全 退 出 ~</a> 欢 迎
您:[[${session.loginAdmin.name}]]
<hr/>
<div style="text-align: center"><h1>管理雇员~</h1><table border="1px" cellspacing="0" bordercolor="green" style="width:800px;margin:
auto"><tr><td>id</td><td>name</td><td>age</td><td>email</td><td>password</td></tr><tr bgcolor="pink" th:each="user: ${users}"><!-- [[${user.id}]] 就是 th 的行内写法 --><td>[[${user.id}]]</td><td th:text="${user.name}"></td><td>[[${user.age}]]</td><td>[[${user.email}]]</td><td>[[${user.password}]]</td></tr></table><br/>
</div>
<hr/>
<img src="data:images/logo.png"/>
</body>
</html>
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>管理后台</title>
</head>
<body bgcolor="#CED3FE">
<img src="data:images/1.GIF"/>
<a href='#'>返回管理界面</a> <a href='#' th:href="@{/}">安全退出</a> 欢迎您:[[${session.loginAdmin.name}]]
<hr/>
<div style="text-align: center"><h1>管理雇员~</h1><table border="1px" cellspacing="0" bordercolor="green" style="width:800px;margin: auto"><tr bgcolor="pink"><td>id</td><td>name</td><td>pwd</td><td>email</td><td>age</td></tr><tr bgcolor="#ffc0cb" th:each="user:${users}"><td th:text="${user.id}">a</td><td th:text="${user.name}">b</td><td th:text="${user.password}">c</td><td th:text="${user.email}">d</td><td th:text="${user.age}">e</td></tr></table><br/>
</div>
<hr/>
<img src="data:images/logo.png"/>
</body>
</html>
服务器渲染技术-->Thymeleaf相关推荐
- 服务器渲染技术-Thymeleaf
1.基本介绍 Thymeleaf 是什么 Thymeleaf是一个现代的服务器端Java模板引擎,适用于Web和独立环境,能够处理HTML,XML,JavaScript,CSS甚至纯文本 Thymel ...
- 服务器渲染技术-JSP
服务器渲染技术-JSP 1.为什么需要 JSP 1.程序员在开发过程中,发现 servlet 做界面非常不方便 2.引出 JSP 技术,JSP 公式 jsp=html+java 片段+标签+javas ...
- 服务器渲染技术jsp
服务器渲染技术 服务器渲染技术 JSP基本介绍 运行原理 常用指令和标签 常用脚本 JSP 注释 JSP 内置对象 JSP 域对象 pageContext request session applic ...
- SpringBoot下的模板技术Thymeleaf详解
Thymeleaf是一个流行的模板引擎,该模板引擎采用Java语言开发. 模板引擎是一个技术名词,是跨领域跨平台的概念,在Java语言体系下有模板引擎,在C#.PHP语言体系下也有模板引擎,在Java ...
- 前端后分离深入分析 ——浏览器渲染和服务器渲染区别
1.为什么会有服务器渲染与客户端渲染? 首先理解服务器和浏览器客户端之间传递的是什么--HTML,CSS,JavaScript的文件以及数据载体json(xml)等文件,而文件都是静态,之所以动态是应 ...
- 高并发图片实时渲染技术在阿里妈妈的大规模应用
个性化推荐已经广泛应用到新媒体.电商.游戏等领域,当你打开手机淘宝的时候,淘宝会根据你的浏览和购买等历史行为,提供个性化的商品推荐.那么,这些形式多样.风格各异的个性化商品展示是怎样最终呈现到APP中 ...
- react服务端渲染技术
Webpack和react的项目一般打包出来的文件会包括 js css 文件, 在html里也就只需要用标签引入这几个文件就可以在客户端抓到JS信息之后动态渲染HTML,可是再右键点击显示网页源代码的 ...
- 基于服务器端的三维渲染技术
Martin等人根据渲染发生在客户端还是服务器端,将三维渲染分为基于客户端的渲染,基于服务器端的渲染和基于混合端的渲染. 基于客户端的渲染 基于服务器端的渲染 基于混合端的渲染 渲染端 客户端 服 ...
- 单页面SPA(如react,vue)网站的服务器渲染SSR之SEO大杀器rendertron(超详细配置+避坑)
单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...
最新文章
- 2015年最棒的10个 JavaScript 框架
- 关于windows对话框
- MySQL 备份和恢复策略(二)
- CentOS中使用Docker来部署Tomcat
- 微软宣布SQL Server 2019免费支持Java
- 智慧交通day02-车流量检测实现07:匈牙利算法
- 【Java】灵活使用自定义注解和反射
- ZSKAME大白菜2013官网下载
- Serializable序列化
- 【Elasticsearch】Elasticsearch日志场景最佳实践
- 虚拟偶像成为二次元香饽饽,从直播切入有戏吗?
- thinkpad开机后无法进入系统怎么办?
- ESP32-IDF开发笔记 | 01 - ESP-IDF开发环境搭建(2023.04.08更新)
- 兑换记录html页面,兑换码记录.html
- 【计算机组成原理】第一章 概论
- UE4 Matinee功能基本概念及简单示例(Sequence编辑器)
- 编写函数求解一元二次方程
- 爬虫的原理和数据抓取
- Python编程入门基础学习
- 【信息图】iPhone屏幕分辨率终极指南
热门文章
- 远程工作意味着永无下班时间?是时候实施每周四天工作制了!
- MacClean360 for mac(系统清理软件)
- 用Python做的大航海时代ol划船按键器
- 名企实习秘籍:在校大学生如何选择高含金量实习?
- perl正则表达式匹配后的各种变量
- Linux 系统命令及其使用详解大全 (完整版 )
- Precise Detection in Densely Packed Scenes论文详解
- IP地址和子网划分学习笔记之《IP地址详解》
- JavaAwtSwing笔记之 测试 Label JLabel Button JButton 在 BorderLayout中setPreferredSize()的效果
- COBOL语言初级教程(1)--COBOL简介