细品 Spring Boot+Thymeleaf,还有这么多好玩的细节,阿里研发工程师Java笔试

  • 引用绝对 URL:

等价于:

  • 上下文相关的 URL:

首先在 application.properties 中配置 Spring Boot 的上下文,以便于测试:

server.servlet.context-path=/myapp

引用路径:

等价于:

  • 相对 URL:

这个相对是指相对于服务器的 URL,例如如下引用:

等价于:

应用程序的上下文 /myapp 将被忽略。

  • 协议相对 URL:

等价于:

  • 带参数的 URL:

等价于:

~{...}

片段表达式是 Thymeleaf 的特色之一,细粒度可以达到标签级别,这是 JSP 无法做到的。片段表达式拥有三种语法:

  • ~{ viewName }:表示引入完整页面

  • ~{ viewName ::selector}:表示在指定页面寻找片段,其中 selector 可为片段名、jquery选择器等

  • ~{ ::selector}: 表示在当前页寻找

举个简单例子。

在 resources/templates 目录下新建 my_fragment.html 文件,内容如下:

这里有两个 div,通过 th:fragment 来定义片段,两个 div 分别具有不同的名字。

然后在另外一个页面中引用该片段:

用户名 地址


通过 th:replace 来引用片段。第一个表示引用完整的 my_fragment.html 页面;第二个表示引用 my_fragment.html 中的名为 javaboy_link 的片段;第三个表示引用当前页面名为 aaa 的片段,也就是上面那个 table。

3.1.2 字面量

这些是一些可以直接写在表达式中的字符,主要有如下几种:

  • 文本字面量: ‘one text’, ‘Another one!’,…

  • 数字字面量: 0, 34, 3.0, 12.3,…

  • 布尔字面量: true, false

  • Null字面量: null

  • 字面量标记:one, sometext, main,…

案例:

如果文本是英文,并且不包含空格、逗号等字符,可以不用加单引号。

3.1.3 文本运算

文本可以使用 + 进行拼接。

如果字符串中包含变量,也可以使用另一种简单的方式,叫做字面量置换,用 | 代替 '...' + '...',如下:

3.1.4 算术运算

算术运算有:+, -, *, /%

th:with 定义了一个局部变量 age,在其所在的 div 中可以使用该局部变量。

3.1.5 布尔运算
  • 二元运算符:and, or

  • 布尔非(一元运算符):!, not

案例:

3.1.6 比较和相等

表达式里的值可以使用 >, <, >=<= 符号比较。==!= 运算符用于检查相等(或者不相等)。注意 XML规定 <> 标签不能用于属性值,所以应当把它们转义为 &lt;&gt;

如果不想转义,也可以使用别名:gt (>);lt (<);ge (>=);le (<=);not (!)。还有 eq (==), neq/ne (!=)。

举例:

3.1.7 条件运算符

类似于我们 Java 中的三目运算符。

其中,: 后面的部分可以省略,如果省略了,又同时计算结果为 false 时,将返回 null。

3.1.8 内置对象

基本内置对象:

  • #ctx:上下文对象。

  • #vars: 上下文变量。

  • #locale:上下文区域设置。

  • #request:(仅在 Web 上下文中)HttpServletRequest 对象。

  • #response:(仅在 Web 上下文中)HttpServletResponse 对象。

  • #session:(仅在 Web 上下文中)HttpSession 对象。

  • #servletContext:(仅在 Web 上下文中)ServletContext 对象。

在页面可以访问到上面这些内置对象,举个简单例子:

实用内置对象:

  • #execInfo:有关正在处理的模板的信息。

  • #messages:在变量表达式中获取外部化消息的方法,与使用#{…}语法获得的方式相同。

  • #uris:转义URL / URI部分的方法

  • #conversions:执行配置的转换服务(如果有)的方法。

  • #dates:java.util.Date对象的方法:格式化,组件提取等

  • #calendars:类似于#dates但是java.util.Calendar对象。

  • #numbers:用于格式化数字对象的方法。

  • #strings:String对象的方法:contains,startsWith,prepending / appending等

  • #objects:一般对象的方法。

  • #bools:布尔评估的方法。

  • #arrays:数组方法。

  • #lists:列表的方法。

  • #sets:集合的方法。

  • #maps:地图方法。

  • #aggregates:在数组或集合上创建聚合的方法。

  • #ids:处理可能重复的id属性的方法(例如,作为迭代的结果)。

这是一些内置对象以及工具方法,使用方式也都比较容易,如果使用的是 IntelliJ IDEA,都会自动提示对象中的方法,很方便。

举例:

3.2 设置属性值

这个是给 HTML 元素设置属性值。可以一次设置多个,多个之间用 , 分隔开。

例如:

会被渲染成:

javaboy

当然这种设置方法不太美观,可读性也不好。Thymeleaf 还支持在每一个原生的 HTML 属性前加上 th: 前缀的方式来使用动态值,像下面这样:

这种写法看起来更清晰一些,渲染效果和前面一致。

上面案例中的 alt 和 title 则是两个特殊的属性,可以一次性设置,像下面这样:

这个等价于前文的设置。

3.3 遍历

数组/集合/Map/Enumeration/Iterator 等的遍历也算是一个非常常见的需求,Thymeleaf 中通过 th:each 来实现遍历,像下面这样:

users 是要遍历的集合/数组,u 则是集合中的单个元素。

遍历的时候,我们可能需要获取遍历的状态,Thymeleaf 也对此提供了支持:

  • index:当前的遍历索引,从0开始。

  • count:当前的遍历索引,从1开始。

  • size:被遍历变量里的元素数量。

  • current:每次遍历的遍历变量。

  • even/odd:当前的遍历是偶数次还是奇数次。

  • first:当前是否为首次遍历。

  • last:当前是否为最后一次遍历。

u 后面的 state 表示遍历状态,通过遍历状态可以引用上面的属性。

3.4 分支语句

只显示奇数次的遍历,可以使用 th:if,如下:

th:if 不仅仅只接受布尔值,也接受其他类型的值,例如如下值都会判定为 true:

  • 如果值是布尔值,并且为 true。

  • 如果值是数字,并且不为 0。

  • 如果值是字符,并且不为 0。

  • 如果值是字符串,并且不为 “false”, “off” 或者 “no”。

小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
img

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

image

image

image

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

到天花板技术停滞不前!**

因此收集整理了一份《2024年最新Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
[外链图片转存中…(img-CzjxvRUO-1711188128235)]
[外链图片转存中…(img-Yhpm7N7c-1711188128236)]
[外链图片转存中…(img-ryHwJSaq-1711188128237)]

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)
[外链图片转存中…(img-T7d9TrRR-1711188128237)]

Java核心架构进阶知识点

面试成功其实都是必然发生的事情,因为在此之前我做足了充分的准备工作,不单单是纯粹的刷题,更多的还会去刷一些Java核心架构进阶知识点,比如:JVM、高并发、多线程、缓存、Spring相关、分布式、微服务、RPC、网络、设计模式、MQ、Redis、MySQL、设计模式、负载均衡、算法、数据结构、kafka、ZK、集群等。而这些也全被整理浓缩到了一份pdf——《Java核心架构进阶知识点整理》,全部都是精华中的精华,本着共赢的心态,好东西自然也是要分享的

[外链图片转存中…(img-UUKYCKIV-1711188128238)]

[外链图片转存中…(img-V6inm8F5-1711188128238)]

[外链图片转存中…(img-p1oJLINq-1711188128239)]

内容颇多,篇幅却有限,这就不在过多的介绍了,大家可根据以上截图自行脑补

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

  • 32
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值