thymeleaf模板引擎,spring boot原理
thymeleaf模板引擎,spring boot原理详细介绍
本文目录一览: thymeleaf适合做seo么
Thymeleaf 是一种基于 Java 的服务器端模板引擎,用于在 Web 应用程序中呈现 HTML、XML、JavaScript、CSS 和纯文本。由于 Thymeleaf 的语法简单易懂,使用方便,因此很受开发者的欢迎。然而,Thymeleaf 本身并没有与 SEO 相关的专门功能,因此不能说 Thymeleaf 是专为 SEO 而设计的工具。不过,使用 Thymeleaf 进行 Web 开发,可以采用一些 SEO 最佳实践,提高页面的搜索引擎可见性,如:
1. 使用语义化的 HTML 标签,例如使用 H1 标签标识页面主标题,使用 H2 标签标识二级标题等等。
2. 在页面中添加元数据,例如页面标题(title)、页面描述(description)、关键词(keywords)等,以便搜索引擎能够更好地理解页面的内容和主题。
3. 使用清晰简洁的 URL,遵循 RESTful 设计原则,避免 URL 中包含不相关的信息,例如会话 ID 或其他参数。
4. 优化页面加载速度,例如使用浏览器缓存、压缩静态资源等,提高页面加载速度。
总的来说,Thymeleaf 可以与一些 SEO 最佳实践相结合,提高页面的搜索引擎可见性和用户体验。但是,要想实现良好的 SEO 效果,还需要采取一些其他的 SEO 措施,例如创建高质量的内容、获取高质量的外部链接等。
Thymeleaf 模板引擎的使用
模板引擎和前端框架的区别是什么?
1.JSP、Velocity、Thymeleaf等这是模板引擎,Jquery、Vue等这是前端框架。so,它们不一样。
2.缓存模板结构,在数据层操du作完直接套用模板输出到客户端界面中,减少dom操作的异常、减少拼接html的痛苦、减少各浏览器下dom操作的延迟差异 。这是模板引擎干的事情。
3.前端框架,提升开发效率,dom加载效率等。
为何选Thymeleaf,而抛弃了别的模板引擎比如JSP
1.SpringBoot默认整合Thymeleaf,不需要任何配置直接整合成功,打jar包发布不需要做任何配置。
2.Thymeleaf相对于其他的模板引擎(如:Freemaker、velocity),有强大的工具支持。
3.相对于Jsp页面,执行效率高。
记录一个错误,是SpringBoot 和thumeleaf版本冲突的问题,这里需要把上面的切换版本配置改改
错误: An attempt was made to call the method org.thymeleaf.spring5.SpringTemplateEngine.setRenderHiddenMarkersBeforeCheckboxes(Z)V but it does not exist. Its class, org.thymeleaf.spring5.SpringTemplateEngine, is available from the following locations...
写一个小的测试,在Controller中添加一个访问,并在template目录下写个success.html
使用 http://localhost:8099/success ,能够访问到页面内容就证明模板引擎配置ok了。
th:id=" {}"
....
可以看到,我们可以使用th:**的方式替换原有的html属性,其余更多参考thymeleaf的官方文档,c:forEach 遍历,c:set 生命变量,c:if判断,jsp:include 片段包含.....。还有一些表达式语法的说明 ${} 获取对象的属性,调用方法。
success.html
HelloController
简单的小例子,验证配置没有问题,更强大的功能在后续的复杂案例中再继续学习。
使用thymeleaf模板引擎抽取公共页面
1、把公共部分放到一个公共页面common.html,注意:页面里边需要使用thymeleaf的名称空间xmlns:th="http://www.thymeleaf.org"
2、使用thymeleaf中的fragment定义截取片段th:fragment,或者使用id定义
3、定义片段完成后,需要参照官方文档里边的内容,引用片段,有th:insert、th:replace、th:include
这三种内容的区别是:
(1)th:insert:
总结:insert会把标签里边里面的所有内容给插入进去,div依旧保存
(2)th:replace方法
区别是div不见了,也就是说,把div给替换掉了,只保留片段的所有内容
(3)th:include方法
使用include之后,是把片段里边的内容给包含进去
4、演示使用include插入公共片段:(1)先把它的公共样式给删除
(2)使用th:include插入
「SpringBoot实战」视图技术-Thymeleaf
在一个Web应用中,通常会采用MVC设计模式实现对应的模型、视图和控制器,其中,视图是用户看到并与之交互的界面。对最初的Web应用来说,视图是由HTML元素组成的静态界面;而后期的Web应用更倾向于使用动态模板技术,从而实现前后端分离和页面的动态数据展示。Spring Boot框架为简化项目的整体开发,提供了一些视图技术支持,并主要推荐整合模板引擎技术实现前端页面的动态化内容。本文对SpringBoot常用的Thymeleaf进行整合。
Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式,在使用Spring Boot框架进行页面设计时,一般会选择 Thymeleaf模板。我们在这里学习Thymeleaf 常用的标签、表达式。
Thymeleaf标签
使用标签只需要加上一个命名空间就可以了。 即修改原html的第二行就可以了。
变量表达式${..}主要用于获取上下文中的变量值,示例代码如下。
这是标题
- 使用了Thymeleaf模板的变量表达式${..}用来动态获取p标签中的内容 - 如果当前程序没有启动或者当前上下文中不存在title变量,该片段会显示标签默认值“这是标题”; - 如果当前上下文中存在title 变量并且程序已经启动,当前p标签中的默认文本内容将会被tite变量的值所替换,从而达到模板引擎页面数据动态替换的效果。
Thymeleaf为变量所在域提供了一些内置对象
结合上述内置对象的说明,假设要在Thymeleaf模板擎页面中动态获取当前国家信息,可以使用#locale内置对象
选择交量表达式和变量表达式用法类似,一般用于从被选定对象而不是上下文中获取属性值,如果没有选定对象,则和变量表达式一样,示例代码如下。
消息表达式#{..}主要用于Thymeleaf模板页面国际化内容的动态替换和展示。使用消息表这式#{..}进行国际化设置时,还需要提供一些国际化配置文件。关于消息表达式的使用,下文写国际化时会详细说明。
链接表达式@{..}一般用于页面跳转或者资源的引入,在Web开发中占据着非常重要的地位,并且使用也非常频繁。
片段表达式~{..}是一种用来将标记片段移动到模板中的方法。其中,最常见的用法是使用th:insert或th:replace 属性插入片段
Spring Boot默认设置了静态资源的访问路径,默认将/**所有访问映射到以下目录。
我们创建一个springboot项目用于本次实验。项目名为springboot_01_thyme。java8,springboot2.6.6
创建一个LoginController类用于数据替换效果测试。
我们写一个login.html进行测试。我们导入一个bootstrap的样式到static/login里面,并且自己定义一些css。
最后我们通过访问http://localhost:8080/toLoginPage 可以查看效果
在resources目录下创建名为i18n的文件夹,数一数这个单词多少个字母internationalization,就知道为什么叫i18n了。 然后我们在i18n文件夹下面创建login.properties、 login_zh_CN.properties、 login_en_US.properties文件。 目录结构:这个Resource Bundle 'login'时idea自动创建的,我们不需要管,只需要完成我们的就行。
login.properties
login_zh_CN.properties
login_en_US.properties
然后我们在配置文件application.properties里面添加代码
我们在config包下面创建一个MyLocalResovel类,自定义国际化功能区域信息解析器。
这里我们基本就完成了,但是在访问中文的时候会出现乱码现象。
我们打开idea的file->settings->file Encodings. 将Default encoding for properties的编码改为utf-8,同时勾选Transparentnative-to-ascii conversion
然后我们重新编写login.properties和其他相关的
但是这种方法1只对当前项目有效。下次创建还是使用GBK编码
本文我们主要了解了Thymeleaf的基本语法、标签、表达式、基本使用、同时还实现了页面登录页得国际化。
本文作者:hjk-airl
本文链接:https://www.cnblogs.com/hjk-airl/p/16181598.html
Thymeleaf 5 分钟教程
Thymeleaf 是一个用于 web 和独立环境的现代服务器端 Java 模板引擎。
Thymeleaf 的主要目标是为开发工作流程带来优雅的自然模板ー HTML,它既可以在浏览器中正确显示,也可以作为静态原型工作,从而加强开发团队之间的协作。
有了 Spring Framework 的模块、大量与您最喜欢的工具集成的功能,以及插入您自己功能的能力,Thymeleaf 是现代 HTML5 JVM web 开发的理想选择ーー尽管它可以做的还有很多。
用 Thymeleaf 语言编写的 HTML 模板看起来和工作方式仍然类似于 HTML,使得在应用程序中运行的实际模板仍然可以作为有用的设计工件工作。
Thymeleaf 3.0.11.RELEASE is the current stable version. It requires Java SE 6 or newer.
For the old 2.1.x branch, Thymeleaf 2.1.6.RELEASE is the latest version.
称为 Standard 和 SpringStandard ,这些方言定义了一组特性,对于大多数场景来说,这些特性应该足够了。 你可以识别这些标准方言何时在模板中使用,因为它包含以 th 前缀开头的属性,比如 span th: text..."。
Variable expressions.
Variable expressions
所以这相当于:
消息表达式(通常称为文本外部化、国际化或 i18n)允许我们从外部源(。 属性文件) ,通过键引用它们,并(可选地)应用一组参数。
因此,对于部署在 web 服务器的 / myapp 上下文中的 web 应用程序,可以使用如下表达式:
可以转换成这样的东西:
Url 也可以带参数:
导致这样的结果:
链接表达式可以是相对的,在这种情况下,没有应用程序上下文将前缀的 URL:
还有服务器相关(同样,没有应用程序上下文可以前缀) :
和 protocol-relative (就像绝对 url 一样,但是浏览器将使用与显示页面相同的 HTTP 或 HTTPS 协议) :
当然,Link 表达式可以是绝对的:
但是它们可以在任何地方使用,就像任何其他变量一样:
A good bunch of types of literals and operations are available:
Literals: Text literals: 'one text', 'Another one!',… Number literals: 0, 34, 3.0, 12.3,… Boolean literals: true, false Null literal: null Literal tokens: one, sometext, main,…
Text operations: 文本运算 String concatenation: + Literal substitutions: |The name is ${name}| Arithmetic operations: Binary operators: +, -, *, /, % Minus sign (unary operator): -
Boolean operations: 布尔运算 Binary operators: and, or Boolean negation (unary operator): !, not
Comparisons and equality: 比较运算 Comparators: >, <, >=, <= (gt, lt, ge, le) Equality operators: ==, != (eq, ne)
Conditional operators: 条件运算 If-then: (if) ? (then) If-then-else: (if) ? (then) : (else) Default: (value) ?: (defaultvalue)
让我们来看看文学语言中的一些最基本的属性。 以 th: text 开始,它只是替换了标记的主体(请再次注意这里的原型化能力) :
接下来是 each,它会重复数组或表达式返回的元素的次数,并为迭代元素创建一个内部变量,其语法与 Java foreach 表达式相同:
最后,Thymeleaf 为特定的 XHTML 和 HTML5属性包含了许多 th 属性,这些属性只是评估它们的表达式并将这些属性的值设置为它们的结果。 他们的名字模仿了他们设置的属性值:
thymeleaf th:if表达式语法 网页应用
thymeleaf th:if表达式语法 https://blog.csdn.net/weixin_38970805/article/details/82937465
Thymeleaf的基本语法
Thymeleaf是一款用于渲染XML/XHTML/HTML5内容的模板引擎,类似JSP,Velocity,FreeMaker等,它也可以轻易的与Spring MVC等Web框架进行集成作为Web应用的模板引擎。
Thymeleaf最大的特点是能够直接在浏览器中打开并正确显示模板页面,而不需要启动整个Web应用,但是总是看到说其效率有点低
这样才可以在其他标签里面使用th: 这样的语法.这是下面语法的 前提 *.
重点!重点!重点!
表达式很像变量表达式,不过它们用一个预先选择的对象来代替上下文变量容器(map)来执行 *{customer.name}
j简单看一下就可以,文字国际化表达式允许我们从一个外部文件获取区域文字信息(.properties),用Key索引Value,还可以提供一组参数(可选).
? 利用状态变量判断:
为了模板更加易用,Thymeleaf还提供了一系列Utility对象(内置于Context中),可以通过#直接访问。
thymeleaf_3.0.5_中文参考手册 提取码:emk0
一篇文章搞懂Thymeleaf
在控制器中往页面传递几个变量:
在页面中使用变量表达式${}来获取它们:
可以看到变量表达式不但可以获取变量的属性值,甚至还可以访问变量的方法(getName()和upcaseName())。session代表HttpSession对象。
*{}代指th:object所指定的对象,即${session.user}。
URL链接表达式会给URL自动添加上下文的名字。比如:
解析后的href值为 http://localhost:8080/thymeleaf/main 。
当需要在URL中传递参数时,比如这样 http://localhost:8080/thymeleaf/main?name=KangKang ,可以如下操作:
传递多个参数:
路径变量的写法:
后端接受路径变量:
除了使用'...' + ${}来连接字面量和变量外,还可以使用|...|来代替,比如:
等价于:
注意: 在| ... |字面替换中只允许有变量表达式${...}
条件表达式实际上就是三目运算符。比如:
条件表达式也可以使用括号嵌套:
else表达式也可以省略,在这种情况下,如果条件为false,则返回空值:
默认表达式是一种特殊类型的条件值,不带then部分。比如:
表示,当${session.user.sex}为null时,值为sex is unknown,否则为表达式的值。这就好像为表达式指定了一个默认值一样。其等价于:
Thymeleaf默认提供了丰富的表达式工具类,这里列举一些常用的工具类。
比如:
注意事项 :
值得注意的是,在使用工具类对某个表达式进行处理时候,你可能会写成:
${#strings.isEmpty(${session.user.name})}。
实际上这种写法是错误的,将抛出异常。正确的写法为:
${#strings.isEmpty(session.user.name)}。
在Thymeleaf中,使用 th:each 标签可对集合类型进行迭代,支持的类型有:
1.任何实现了 java.util.List 的对象;
2.任何实现了 java.util.Iterable 的对象;
3.任何实现了 java.util.Enumeration 的对象;
4.任何实现了 java.util.Iterator 的对象;
5.任何实现了 java.util.Map 的对象。当迭代maps时,迭代变量是 java.util.Map.Entry 类型;
6.任何数组。
一个简单的例子:
其中${prods}为迭代值,prod为迭代变量。除此之外,我们还可以通过状态变量获取迭代的状态信息,比如:
其中stat就是状态变量。默认为迭代变量加上Stat后缀,在本例中,不直接申明stat,则状态变量名称为prodStat。状态变量包含以下信息:
1.index,当前迭代下标,从0开始;
2.count,当前迭代位置,从1开始;
3.size,迭代变量中的总计数量;
4.current,每次迭代的迭代变量;
5.even/odd,当前迭代是偶数还是奇数;
6.first,当前迭代的是不是第一个;
7.last,当前迭代的是不是最后一个;
例子:
页面显示如下:
当prod.comments不为空时,页面将渲染出该