此文章发布于67
个月前,部分信息可能已经过时
,请自行斟酌确认。
做 Web 开发离不开模板引擎,想十多年前微酷那时热衷于下载各类网站 CMS 管理系统,第一时间就是看模板支持哪些标签,那时认为内置支持的模板标越多就越牛B,谁让那时不会编程只是个苦逼的草根伪站长呢。
当时就认为动易是最牛逼的 CMS,织梦也很流行但感觉 PHP 好难模板改起来也好复杂...
扯远了,今天的正题是分享下 Java 比较流行的模板引擎,先说下微酷一个也没用过,因为这个月刚开始转研究 Java,之前一直在做 C# 呢。
Jsp
这个必须放到第一位,传统方式,可写 java 代码,支持 jsp 标签,表达式语法,官方标准,丰富的标签库,但这里不推荐。
FreeMarker
官网:https://freemarker.apache.org/
FreeMarker 是一款免费的模板引擎,它不是面向最终用户的,而是一个 Java 类库,是一款程序员可以嵌入他们所开发产品的组件。
模板编写为 FreeMarker Template Language (FTL)
。它是简单的,专用的语言, 不是像PHP那样成熟的编程语言。那就意味着要准备数据在真实编程语言中来显示,比如数据库查询和业务运算, 之后模板显示已经准备好的数据。在模板中,你可以专注于如何展现数据, 而在模板之外可以专注于要展示什么数据。
使用表达式语言,性能不错,内置大量常用功能。比如html过滤,日期金额格式化等等,使用非常方便。
<!DOCTYPE html>
<html>
<body>
<h1>Hello ${name}</h1>
<#-- if 指令-->
<h1>
<#if name == "FreeMarkerX">
Welcome
<#else>
Bye~
</#if>
</h1>
<table>
<tr>
<td>name</td>
<td>age</td>
</tr>
<#-- 遍历列表-->
<#list list as user>
<tr>
<td>${user.username}</td>
<td>${user.age}</td>
</tr>
</#list>
</table>
</body>
</html>
Thymeleaf
Spring Boot 官方推荐模板,Thymeleaf 的主要目标在于提供一种可被浏览器正确显示的、格式良好的模板创建方式,因此也可以用作静态建模。你可以使用它创建经过验证的XML与HTML模板。相对于编写逻辑或代码,开发者只需将标签属性添加到模板中即可。
静态html嵌入标签属性,浏览器可以直接打开模板文件,便于前后端联调。
听说性能是相当的差,虽然 3.0 号称提供很多,但和其它模板比起来性能还是差。
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
<meta charset="UTF-8">
<title>Thymeleaf-1</title>
</head>
<body>
<h1>if 判断</h1>
<h3>
<b th:text="${name}"></b>
<span th:if="${age gt 20}">老年</span>
<span th:unless="${age gt 20}">少年</span>
</h3>
<table>
<tr>
<td>用户名</td>
<td>密码</td>
</tr>
<tr th:each="user : ${userList}">
<td th:text="${user.username}">test-username</td>
<td th:text="${user.password}">test-password</td>
</tr>
</table>
</body>
</html>
Velocity
官网:http://velocity.apache.org/
较早出现的用于代替 jsp 的模板,性能良好,据说比jsp性能还要好些,使用表达式语言。
可用于代码生成,从模板生成 SQL 等,语法看起来是微酷喜欢的类型。
#set($number = 1)
#if($number == 1)
这个数是 1
#elseif($number == 2)
这个数是 2
#else
这个数是3
#end
#foreach ( $item in [1..5] )
$item
#end
-------------------------------
#set ( $arr2 = [0..1] )
#set ( $k = 1 )
#foreach ( $x in $arr2 )
x:$x,k: $k
#set($k = $k+1)
#end
-------------------------------
beetl
国产模板引擎,Beetl 类似 Javascript 语法和习俗,只要半小时就能通过半学半猜完全掌握用法。官方号称速度非常的快:Beetl 远超过主流 java 模板引擎性能(引擎性能5-6倍与 freemaker,2倍于JSP)
<%
if(name=='lijzh'||age!=18){
%>
Hello,${name}
<%}else{%>
Morning ${name}
<%}%>
<%
for(user in userList){
%>
${user.name}
<%}%>
<%
var date = date();
%>
today is ${date,dateFormat='yyyy-MM-dd'}
Enjoy
JFinal 极速开发框架出品的模板引擎,没大了解,有兴趣自己看下。
前后分离
什么年代了,现在流行前后分离
,前后分离还用什么模板引擎,你需要的可能是:前端 UI 控件库