什么是模板引擎(web)?常见的模板引擎有哪些?thymeleaf的常用指令介绍

2022-08-02 10:46:29

模板引擎:

模板引擎是为了让用户显示界面业务数据内容分离而产生的,可以生成特定形式的文档,常用的格式有HTML、XML以及其他格式的文档。

 常见的模板引擎:

jsp、freemarker、velocity、themeleaf

(1)jsp   优点:1>>功能强大,可以写java代码,因此jsp代码可以跨平台。

                             2>>支持jsp标签、支持表达式语言

                             3>>性能良好,jsp文件会编译成class文件执行,有很好的性能表现

                             4>>官方标准,用户群广,丰富的第三方jsp标签库

                  缺点:调试难度高,因为是编译成class文件的,所以在报错时是class文件报错不是jsp。已经很少有公司使用了

(2)freemarker   优点:1>>不能编写java代码,可以实现严格的MVC分离

                                        2>>对jsp标签支持良好

                                        3>>内置大量的常用功能、宏定义(类似于jsp标签),使用非常简单

                                        4>>使用表达式语言

                              缺点:不是官方标准,第三方标签库不如jsp多

(3)velocity   优点:1>>不能编写java代码,可以实现严格的MVC分离

                                   2>>其官方好像表示比jsp功能还要好一些

                                   3>>使用表达式语言,jsp的表达式语言可能就是学velocity的

                        缺点:1>>不是官方标准,第三方标签库不如jsp多

                                   2>>对jsp标签支持不够好

                                   3>>已经很久没有维护了

(4)thymeleaf:Thymeleaf是用来开发Web和独立环境项目的服务器端的Java模版引擎。

        Spring官方支持的服务的渲染模板中,并不包含jsp。而是Thymeleaf和 Freemarker等,而Thymeleaf与SpringMVC的视图技术,及SpringBoot的 自动化配置集成非常完美,几乎没有任何成本,你只用关注Thymeleaf的语法即可。

优点   1>>动静结合:Thymeleaf 在有无网络上都可以运行,即可以浏览静态页面(忽略未定义的标签属性)也可以浏览动态页面(因为其支持HTML原型,利用标签的额外属性来达到模板+数据的展示)。

           2>>开箱即用:它提供标准spring标准两种方言,可以直接套用模板实现JSTL、OGNL表达式效果,避免每天套模板、改jstl、改标签的困扰。

           3>>多方言支持:thymeleaf提供了spring标准方言和一个与SpringMVC完美集成的可选模块,快速实现表单绑定、属性编辑器、国际化等功能。

           4>>与SpringBoot完美整合:SpringBoot提供了Thymeleaf的默认配置,并且为Thymeleaf设置了视图解析器,我们可以像以前操作jsp一样来操作Thymeleaf。代码几乎没有任何区别,就是在模板语法上有区别

缺点   :模板必须符合xml规范

thymeleaf的常用指令介绍:

(定义学生对象《student》属性《sname、ssex、birthday》)

首先在HTML中声明:<htmlxmlns:th="http://www.thymeleaf.org" >

获取值的ognl表达式:${(需要引入的数据)}

指令是:th:xxxxx  用两个中括号也可以直接${}内容,方便替换

<!-- 用两个中括号也可以直接${}内容,方便替换 -->
	<div><span style="color: aqua	">我是张三的妹妹</span>[[${name}]]</div>
	<script type="text/javascript">
		alert("[[${name}]]");
	</script>

双标签↓:

<!-- 给双标签中间赋值 th:text  不仅仅是赋值的html转换 th:utext  -->
<h1 th:text="${数据}"> 结果呈现</h1>
<!-- 如果servlet传递的是一个对象(student),可以直接点起属性(sname,ssex,birthday) -->
<h1 th:text="${student.sname}"> 结果呈现</h1>
<!-- 时间的转换格式 -->
<p th:text="${#dates.format(stu.birthday,'yyyy-MM-dd')}"></p>

<!--不仅仅是赋值的html转换 th:utext  -->
<!--session.setAttribute("err", new MsgUtil(MsgUtil.bgcolor.danger(枚举值), "账号或密码错误").getMshtml()(HTML)); -->
<div id="result" th:utext="${session.err}"></div>

单标签↓:

<input type="number" th:value="*{classid}"/>

session容器中拿取数据的两种方式↓:

<!--方式一:语法糖  -->
<div th:text="${session.stu2.sname}"></div>
<!--方式二:不使用语法糖  -->
<div th:text="${#session.getAttribute('stu2')['sname']}"></div>

三元运算符 两种方式↓:

<div th:text="${sex} == 1 ? '男' : '女'"></div>
<div th:text="${name1} ?:此人没有名字"></div>

th:if 当条件为真时渲染页面     th:unless 当条件为假时渲染页面

<!--  if是为true显示  unless是为false-->
<div th:if="${sex} == 1">
		<input type="radio" name="sex" value="男" checked/>男
		<input type="radio" name="sex" value="女"/>女
</div>

字符串拼接

<!-- 字符串的拼接 -->
<div th:text="'我是张三的妹妹' +${name}"></div>
<div th:text="|我是张三的妹妹${name}|"></div>

遍历

<h1>学生信息表</h1>
	    <table border="2" align="center">
		<tr >
			<th>序号</th>
			<th>编号</th>
			<th>姓名</th>
			<th>性别</th>
			<th>生日</th>
			<th>班级编号</th>
			<th>下标</th>
			<th>个数</th>
			<th>对象地址值</th>
			<th>是否是偶数行</th>
			<th>是否是奇数行</th>
			<th>是否是首行</th>
			<th>是否是尾行</th>
			
		</tr>
		<tr th:each="s,x : ${slist}" th:classappend="${x.odd} ? 'red': 'blue' ">
			<td th:text="${x.count}"></td>
			<td th:text="${s.sid}"></td>
			<td th:text="${s.sname}"></td>
			<td th:text="${s.ssex}"></td>
			<td th:text="${#dates.format(s.birthday,'yyyy-MM-dd')}"></td>
			<td th:text="${s.classid}"></td>
			<td th:text="${x.index}"></td>
			<td th:text="${x.size}"></td>
			<td th:text="${x.current}"></td>
			<td th:text="${x.even}"></td>
			<td th:text="${x.odd}"></td>
			<td th:text="${x.first}"></td>
			<td th:text="${x.last}"></td>
			
		</tr>
	</table>
  • 作者:l1050188952
  • 原文链接:https://blog.csdn.net/l1050188952/article/details/125671569
    更新时间:2022-08-02 10:46:29