SpringBoot视图解析与模板引擎

news2024/11/24 12:57:53

目录

1、视图解析

1、视图解析原理流程 

2、模板引擎-Thymeleaf

1、thymeleaf简介

2、基本语法

3、设置属性值-th:attr

4、迭代 

5、条件运算

6、属性优先级

3、thymeleaf使用

1、引入Starter

2、自动配置好了thymeleaf

3、页面开发

4、构建后台管理系统

1、项目创建

2、静态资源处理

3、路径构建

4、模板抽取

5、页面跳转

6、数据渲染


视图解析:SpringBoot默认不支持 JSP,需要引入第三方模板引擎技术实现页面渲染。

1、视图解析

1、视图解析原理流程 

 

2、模板引擎-Thymeleaf

1、thymeleaf简介

官网文档:Documentation - Thymeleaf

Thymeleaf is a modern server-side Java template engine for both web and standalone environments, capable of processing HTML, XML, JavaScript, CSS and even plain text.

简而言之:现代化、服务端Java模板引擎

2、基本语法

1、表达式

表达式名字

语法

用途

变量取值

${...}

获取请求域、session域、对象等值

选择变量

*{...}

获取上下文对象值

消息

#{...}

获取国际化等值

链接

@{...}

生成链接

片段表达式

~{...}

jsp:include 作用,引入公共页面片段

2、字面量

文本值: 'one text' , 'Another one!' ,…数字: 0 , 34 , 3.0 , 12.3 ,…布尔值: true , false

空值: null

变量: one,two,.... 变量不能有空格

3、文本操作

字符串拼接: +

变量替换: |The name is ${name}|

4、数学运算

运算符: + , - , * , / , %

5、布尔运算

运算符: and , or

一元运算: ! , not

6、比较运算

比较: > , < , >= , <= ( gt , lt , ge , le )等式: == , != ( eq , ne )

7、条件运算

If-then: (if) ? (then)

If-then-else: (if) ? (then) : (else)

Default: (value) ?: (defaultvalue)

8、特殊操作

无操作: _

3、设置属性值-th:attr

设置单个值

<form action="subscribe.html" th:attr="action=@{/subscribe}">
  <fieldset>
    <input type="text" name="email" />
    <input type="submit" value="Subscribe!" th:attr="value=#{subscribe.submit}"/>
  </fieldset>
</form>

 设置多个值

<img src="../../images/gtvglogo.png"  th:attr="src=@{/images/gtvglogo.png},title=#{logo},alt=#{logo}" />

 以上两个的代替写法 th:xxxx

<input type="submit" value="Subscribe!" th:value="#{subscribe.submit}"/>
<form action="subscribe.html" th:action="@{/subscribe}">

所有h5兼容的标签写法

Tutorial: Using Thymeleaf

4、迭代 

<tr th:each="prod : ${prods}">
        <td th:text="${prod.name}">Onions</td>
        <td th:text="${prod.price}">2.41</td>
        <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

<tr th:each="prod,iterStat : ${prods}" th:class="${iterStat.odd}? 'odd'">
  <td th:text="${prod.name}">Onions</td>
  <td th:text="${prod.price}">2.41</td>
  <td th:text="${prod.inStock}? #{true} : #{false}">yes</td>
</tr>

5、条件运算

<a href="comments.html"
th:href="@{/product/comments(prodId=${prod.id})}"
th:if="${not #lists.isEmpty(prod.comments)}">view</a>

<div th:switch="${user.role}">
  <p th:case="'admin'">User is an administrator</p>
  <p th:case="#{roles.manager}">User is a manager</p>
  <p th:case="*">User is some other thing</p>
</div>

6、属性优先级



3、thymeleaf使用


1、引入Starter

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

2、自动配置好了thymeleaf

@Configuration(proxyBeanMethods = false)
@EnableConfigurationProperties(ThymeleafProperties.class)
@ConditionalOnClass({ TemplateMode.class, SpringTemplateEngine.class })
@AutoConfigureAfter({ WebMvcAutoConfiguration.class, WebFluxAutoConfiguration.class })
public class ThymeleafAutoConfiguration { }

自动配好的策略
●1、所有thymeleaf的配置值都在 ThymeleafProperties
●2、配置好了 SpringTemplateEngine
●3、配好了 ThymeleafViewResolver
●4、我们只需要直接开发页面

	public static final String DEFAULT_PREFIX = "classpath:/templates/";

	public static final String DEFAULT_SUFFIX = ".html";  //xxx.html

 3、页面开发

<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1 th:text="${msg}">哈哈</h1>
<h2>
    <a href="www.atguigu.com" th:href="${link}">去百度</a>  <br/>
    <a href="www.atguigu.com" th:href="@{link}">去百度2</a>
</h2>
</body>
</html>

4、构建后台管理系统

1、项目创建

thymeleaf、web-starter、devtools、lombok

2、静态资源处理

自动配置好,我们只需要把所有静态资源放到 static 文件夹下

3、路径构建

th:action="@{/login}"

4、模板抽取

文档:Tutorial: Using Thymeleaf

th:insert/replace/include

区别:

 

5、页面跳转

    @PostMapping("/login")
    public String main(User user, HttpSession session, Model model){

        if(StringUtils.hasLength(user.getUserName()) && "123456".equals(user.getPassword())){
            //把登陆成功的用户保存起来
            session.setAttribute("loginUser",user);
            //登录成功重定向到main.html;  重定向防止表单重复提交
            return "redirect:/main.html";
        }else {
            model.addAttribute("msg","账号密码错误");
            //回到登录页面
            return "login";
        }

    }

 6、数据渲染

    @GetMapping("/dynamic_table")
    public String dynamic_table(Model model){
        //表格内容的遍历
        List<User> users = Arrays.asList(new User("zhangsan", "123456"),
                new User("lisi", "123444"),
                new User("haha", "aaaaa"),
                new User("hehe ", "aaddd"));
        model.addAttribute("users",users);

        return "table/dynamic_table";
    }

        <table class="display table table-bordered" id="hidden-table-info">
        <thead>
        <tr>
            <th>#</th>
            <th>用户名</th>
            <th>密码</th>
        </tr>
        </thead>
        <tbody>
        <tr class="gradeX" th:each="user,stats:${users}">
            <td th:text="${stats.count}">Trident</td>
            <td th:text="${user.userName}">Internet</td>
            <td >[[${user.password}]]</td>
        </tr>
        </tbody>
        </table>

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

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

相关文章

Java基础03——数组

Java基础03——数组一、数组介绍二、数组的定义与静态初始化1. 定义数组2. 数组静态初始化三、数组元素访问1. 数组的地址值2. 数组访问四、数组遍历五、数组动态初始化六、数组常见问题1. 索引越界异常七、数组常见操作1. 求最值2. 求和3. 交换数据4. 打乱数据八、数组内存图九…

java企业人事管理系统企业工资考勤系统

简介 Java基于ssm开发的企业人事考勤工资系统&#xff0c;员工可以打卡、请假。系统根据员工的打卡情况自动计算工资&#xff08;全勤、请假、旷工、加班、迟到、早退等计算出最终实发工资&#xff09;&#xff0c;员工还可以查看自己的考勤记录工资具体组成等。升级版加了部长…

Linux——信号知识归纳(中)

目录 一.信号与硬件异常 二.阻塞信号和信号结构 &#xff08;一&#xff09;.信号状态 &#xff08;二&#xff09;.信号结构 ①pending表 ②block表 ③handler表 &#xff08;三&#xff09;.信号处理过程 &#xff08;四&#xff09;.阻塞与忽略的区别 &#xff08…

Linux 中断子系统(二):GIC 中断控制器

GIC 是 ARM 公司给 Cortex-A/R 内核提供的一个中断控制器,类似 Cortex-M 内核(STM32)中的 NVIC。 GIC:Generic Interrupt Controller,通用中断控制器 NVIC:Nested Vectored. Interrupt Controller,嵌套向量中断控制器目前 GIC 有 4 个版本:V1 ~ V4,V1 是最老的版本,已…

react源码解析20.总结第一章的面试题解答

总结 至此我们介绍了react的理念&#xff0c;如果解决cpu和io的瓶颈&#xff0c;关键是实现异步可中断的更新 我们介绍了react源码架构&#xff08;uifn(state)&#xff09;&#xff0c;从scheduler开始调度&#xff08;根据过期事件判断优先级&#xff09;&#xff0c;经过r…

测试开发 | Jenkins job 机制该如何使用?

Jenkins 像老板一样管理各种 job 。job 是 Jenkins 的一个执行计划&#xff0c;是一系列操作的集合&#xff0c;Jenkins 里的最常用的功能就是 job 的构建&#xff0c;即任务的构建。通过构建 job 即可让工人为你工作。 image806387 84.3 KB 创建 job及配置步聚 可以通过如下步…

C#,图像二值化(20)——全局阈值的耶恩算法(Yen Thresholding)及源代码

1 全局阈值的耶恩算法&#xff08;Yen Throsholding&#xff09;常见阈值算法1.1黄算法HuangThresholdImageFilter使用Shannon的熵函数实现Huang的模糊阈值[1]。模糊性度量表示原始图像与其二进制版本之间的差异。对于给定的阈值级别&#xff0c;像素的模糊隶属度函数由像素灰度…

Java中常用API总结(7)—— BigDecimal类

BigDecimal类一、前言二、概述1.API帮助文档2.使用方法三、常见方法1.格式2.实例3.报错4.解决方法四、结语一、前言 在使用float或者double类型的数据在进行数学运算的时候&#xff0c;很有可能会产生 精度丢失问题 我们都知道计算机底层在进行运算的时候&#xff0c;使用的都…

Echarts image 使用

通过image://...xx.png 在扇形图中可能会失败&#xff0c;可以将需要载入的img转换成base64直接载入可以通过背景色来载入图片 backgroundColor: {image: xxx/xxx.jpg },实例&#xff08;扇形图&#xff09;&#xff1a;var option {tooltip: {trigger: "item",show…

如何用用C++实现通达信接口调用?有哪些技巧

c作为三大计算机语言之一&#xff0c;在编程时很受投资者的偏爱&#xff0c;特别是在通达信接口软件开发时C更是担任着重要的开发角色&#xff0c;今天小编就来和大家说一下如何用C实现通达信接口调用&#xff1f; 用C查询股份数据代码&#xff08;部分&#xff09; std::cou…

C4D和Maya哪个学起来更容易

Maxon Cinema 4D和 Autodesk Maya 是最著名的两种 3D 软件&#xff0c;艺术家和工作室经常在许多领域使用它们。它们都有不同的功能&#xff0c;在本文中&#xff0c;让我们对它们进行比较。我们将尝试向您概述它们之间的主要区别&#xff0c;以及这两者的功能。哪一个更容易使…

2: [SpringData集成Elasticsearch] --- 配置打印命令日志

文章目录一&#xff1a;引入SpringDataElasticsearch依赖二&#xff1a;创建RestHighLevelClient配置类三&#xff1a;配置YML&#xff1a; logging.level --- 日志等级三&#xff1a;请求接口&#xff0c;查看日志3.1&#xff1a;请求代码3.2&#xff1a;Postman请求地址3.3&a…

LayoutInflater学习(一)之布局解析

LayoutInflater的创建与实例化 LayoutInflater是位于 "android.view" 包下的一个抽象类,同样它也是一个系统级服务 package android.view; SystemService(Context.LAYOUT_INFLATER_SERVICE) public abstract class LayoutInflater { LayoutInflater是用来解析 xml…

桌面录屏软件,分享3个十分便捷的录屏软件

​图片和视频都是人们传播信息的方式&#xff0c;不过相比于图片&#xff0c;视频能够更加直观生动的表达信息。在日常生活中&#xff0c;除了屏幕上记录一些应用程序的内容外&#xff0c;有时我们还需要记录电脑桌面。有更好的桌面录屏软件吗&#xff1f;当然&#xff0c;小编…

Git操作不规范,战友提刀来相见!

年终奖都没了&#xff0c;还要扣我绩效&#xff0c;门都没有&#xff0c;哈哈。 这波骚Git操作我也是第一次用&#xff0c;担心闪了腰&#xff0c;所以不仅做了备份&#xff0c;也做了笔记&#xff0c;分享给大家。 文末留言抽奖&#xff0c;聊聊你的年终奖。 问题描述 小A和…

C++多线程(并发、进程、线程的基本概念和综述)

并发、进程、线程的基本概念和综述 并发 并发表示两个或者更多任务(独立的活动)同时发生(进行)。例如&#xff0c;一面唱歌一面弹琴&#xff0c;一面走路一面说话&#xff0c;画画的时候听小说等。回归到计算机领域&#xff0c;所谓并发&#xff0c;就是一个程序同时执行多个…

html 3D立体多形态旋转音乐相册 | 2022都结束了,还不快给女神制作一个特殊的纪念相册

&#x1f4cb; 前言 &#x1f5b1; 博客主页&#xff1a;在下马农的碎碎念✍ 本文由在下马农原创&#xff0c;首发于CSDN&#x1f4c6; 首发时间&#xff1a;2023/01/07&#x1f4c5; 最近更新时间&#xff1a;2023/01/07&#x1f935; 此马非凡马&#xff0c;房星本是星。向前…

零基础掌握IP地址知识,小白必学知识点!

前言 大家好&#xff0c;在生活中我们使用具有上网功能的电子设备都有IP地址&#xff0c;就跟每个人都有自己的名字一样。IP地址分为IPV4 IPV6&#xff0c;我们所说的的IP地址指的是IPV4的地址。 正文 IPV4( Internet Protocol Version 4 )互联协议版本4&#xff0c;有版本V4之…

【HTML+CSS+JavaScript】动感爱心—— I love you~

有段时间没有分享了,no time。 还是抽出一会儿分享一下。有时间会解析的(具体…I don’t know)。 1. 效果展示 真实效果挺好看的,喜欢的朋友,可以给你的女朋友或者喜欢的TA看看呀! 可以根据实际情况修改文案,比如诗歌,或者你爱的人的名字哦~ 2. 源代码分享 2.1 动感…

在Ubuntu上安装docker(Ubuntu版本18.04)

在Ubuntu上安装docker详细步骤1、卸载之前的docker版本2、安装docker仓库3、在系统中添加Docker的官方密钥4、添加docker源5、再次更新源列表6、查看可以安装的docker版本并安装docker7、使用命令查看是否安装成功以及安装的docker版本8、启动 docker服务并设置开机自动启动doc…