typora-root-url |
---|
../beetl3.0 |
______ _________ _____
|_ _ \ | _ _ ||_ _|
| |_) | .---. .---.|_/ | | \_| | |
| __'. / /__\\/ /__\\ | | | | _
_| |__) || \__.,| \__., _| |_ _| |__/ |
|_______/ '.__.' '.__.' |_____| |________|
iBeetl.com © 2010 ~ 2024,国内流行模板引擎
<dependency>
<groupId>com.ibeetl</groupId>
<artifactId>beetl</artifactId>
<version>3.19.1.RELEASE</version>
</dependency>
http://ibeetl.com/beetlonline/
像js那样定义变量和表达式,同时,支持类型说明
#: var a = 1,isCheck=false;
#: var<String> list = getString(); //type declare
<h1>hello ${a}</h1>
支持js的各种语法,比如if,for,while,同时for循环支持elsefor
#: var array = getData();
#: for(var item in array){
<h1> ${itemLP.index}:${item}</h1>
#:}elsefor {
<h1> empty</h1>
#:}
比如使用<%
和%>
代替 #:
和换行
。beetl支持自定义定界符和占位符,并且,支持自定义俩对定界符和俩对占位符
<% var array = [1,2,3];
for(var k in array){ %>
<h1> #{kLP.index}:#{k}</h1>
<% } %>
${call(1)}
${date(),"yyyy-MM-dd"}
可以直接调用Java方法,这些方法能被安全管理
${ @myList.size() }
不仅仅是脚本语法,也支持标签语法
<my:tag aa = "1">hello<、my:tag>
<my:setTag attr = "1" var="b,c">${b},${c}<my:setTag>
支持各种布局
#: var page = "/common.html";
#: include(page,{"title":"用户管理"}){}
可以把beetl当成脚本引擎,它有丰富的功能和优秀的性能
var a =1;
return a+b;
可以禁止任何语法,使得模板跟简单清爽。 比如,不允许模板中出现 赋值语法,或者不允许复杂的表达式,或者不允许java直接调用
# var a=1;//not allowd
${a}
可以很容易通过定制引擎获取模板结构,比如,能获取到如下模板需要外部输入a,且占位符使用了a和c变量,且调用了date方法
#: var c = 1,d = date();
${a},${c}
Paas应用,要求模板渲染不能超过一定次数,以避免jvm 死机,如下可禁止while循环不超过一定次数
#: while(true){
<h1> hello </h1>
#:}
Beetl ['biːtl] 3.0,从 https://github.com/javamonkey/beetl2.0/ 迁移过来
QQ交流群:636321496(满),219324263(满),252010126
官网:ibeetl.com
Beetl>Enjoy>>Rocker>Freemarker>>Thymeleaf==Velociy
Benchmark Mode Cnt Score Error Units
Beetl.benchmark thrpt 5 109547.863 ± 17161.576 ops/s
BeetlByte.benchmark thrpt 5 237799.769 ± 5904.514 ops/s
Enjoy.benchmark thrpt 5 99695.440 ± 14083.595 ops/s
EnjoyByte.benchmark thrpt 5 223874.001 ± 7265.307 ops/s
Freemarker.benchmark thrpt 5 41452.634 ± 15917.119 ops/s
Handlebars.benchmark thrpt 5 40360.198 ± 24345.048 ops/s
Rocker.benchmark thrpt 5 63657.017 ± 4653.265 ops/s
Thymeleaf.benchmark thrpt 5 6457.169 ± 272.613 ops/s
Velocity.benchmark thrpt 5 8024.042 ± 2097.396 ops/s
WastEl>>Liquor>>JfireEL=Spel>> Aviator=Beetl=Snel=Magic=Jexl3 >>Mvel=Groovy>>Nashorn
在线Debug&运行 Beetl脚本 http://ibeetl.com/beetlonline/script.html
Benchmark Mode Cnt Score Error Units
Aviator.forExpresss thrpt 5 525398.696 ± 27189.961 ops/s
Aviator.ifExpresss thrpt 5 3726179.588 ± 132874.023 ops/s
Aviator.simpleExpress thrpt 5 3778320.090 ± 122532.674 ops/s
Beetl.forExpresss thrpt 5 1534072.092 ± 70189.033 ops/s
Beetl.ifExpresss thrpt 5 4879738.902 ± 178031.649 ops/s
Beetl.reflect thrpt 5 69098.735 ± 111448.898 ops/s
Beetl.simpleExpress thrpt 5 4513275.389 ± 336284.514 ops/s
Groovy.forExpresss thrpt 5 138726.489 ± 11629.723 ops/s
Groovy.ifExpresss thrpt 5 137266.741 ± 11607.655 ops/s
Groovy.simpleExpress thrpt 5 138921.490 ± 7511.140 ops/s
Jexl3.forExpresss thrpt 5 784704.385 ± 36250.222 ops/s
Jexl3.ifExpresss thrpt 5 4626638.379 ± 107156.370 ops/s
Jexl3.simpleExpress thrpt 5 3740325.101 ± 162665.992 ops/s
JfireEL.ifExpresss thrpt 5 27471072.321 ± 2525553.860 ops/s
JfireEL.simpleExpress thrpt 5 19171430.421 ± 2196028.648 ops/s
Liquor.forExpresss thrpt 5 376970457.238 ± 12662851.104 ops/s
Liquor.ifExpresss thrpt 5 587016463.396 ± 33597208.386 ops/s
Liquor.simpleExpress thrpt 5 415106716.161 ± 12949512.370 ops/s
Magic.forExpresss thrpt 5 35378.224 ± 2062.149 ops/s
Magic.ifExpresss thrpt 5 8963604.538 ± 390240.691 ops/s
Magic.simpleExpress thrpt 5 5948785.593 ± 215081.556 ops/s
Mvel.forExpresss thrpt 5 11666.909 ± 466.589 ops/s
Mvel.ifExpresss thrpt 5 221933.234 ± 14768.597 ops/s
Mvel.simpleExpress thrpt 5 310877.532 ± 16866.247 ops/s
Snel.ifExpresss thrpt 5 12633739.052 ± 674081.894 ops/s
Snel.simpleExpress thrpt 5 7101424.524 ± 523315.431 ops/s
Spel.ifExpresss thrpt 5 18342273.231 ± 917578.666 ops/s
Spel.simpleExpress thrpt 5 17660176.713 ± 634936.823 ops/s
WastEl.forExpresss thrpt 5 411984521.816 ± 22584962.426 ops/s
WastEl.ifExpresss thrpt 5 576750545.597 ± 44349124.380 ops/s
WastEl.simpleExpress thrpt 5 579483294.975 ± 15145289.882 ops/s
官网文档: https://www.kancloud.cn/xiandafu/beetl3_guide
Beetl 3 中文文档
第一部分 基础用法
1.1 安装
1.2 快速开始
1.3 模板基础配置
1.4 模板加载器
1.5 定界符与占位符
1.6 注释
1.7 变量定义
1.8 属性
1.9 数学表达式
1.10 循环语句
1.11 条件语句
1.12 异常捕获
1.13 虚拟属性
1.14 函数调用
1.15 安全输出(重要)
1.16 输出格式化
1.17 标签
1.18 调用Java方法与属性
1.19 严格MVC控制
1.20 指令
1.21 错误处理
1.22 Beetl小工具
1.23 Escape
第二部分 高级用法
2.1 配置GroupTemplate
2.2 自定义方法
2.3 自定义格式化函数
2.4 自定义标签
2.5 自定义虚拟属性
2.6 使用额外的资源加载器
2.7 自定义资源加载器
2.8 使用CompositeResourceLoader
2.9 自定义错误处理器
2.10 自定义安全管理器
2.11 注册全局共享变量
2.12 自定义布局
2.13 性能优化
2.14 定制输出
2.15 定制模板引擎
2.16 直接运行Beetl脚本
2.17 模板校验
第三部分 Web 集成
3.1 Web提供的全局变量
3.2 集成技术开发指南
3.3 Servlet集成
3.4 SpringMVC集成
3.5 Spring Boot集成
3.6 Jodd集成
3.7 JFinal4 集成方案
3.8 Nutz集成
3.9 Struts2集成
3.10 整合ajax的局部渲染技术
3.11 在页面输出错误提示信息
任何企业和个人都可以免费使用,并能免费得到社区,论坛,QQ群和作者的免费技术支持。以下情况需要收费技术支持,详情可联系微信(lliijjzz),备注“商业技术支持”
996
工作制度的企业,将收取 7996 元
/ 年 的费用1000 - 10000 元
年费在您贡献代码时,请遵循以下基本代码规范:
注释规范 - 示例
/*
版权声明部分
*/
package org.beetl.core.cache;
import java.util.function.Function;
/**
* 缓存的标准接口,每个方法都必须线程安全
*
* @author xiandafu
* @since 2020-09-21
*/
public interface Cache {
/** Log TAG */
String TAG = "Cache";
/**
* 通过 {@code key} 从缓存中获取对应的 value
*
* @param key 键,有可能为 null
* @return 返回缓存中 {@code key} 所对应的 value,有可能为 null
*/
Object get(Object key);
/**
* 通过 {@code key} 从缓存中获取对应的 value;
* 如果获取的value为null,则将 {@code function#apply} 方法的返回值作为newValue,添加到缓存中,并返回
*
* @param key 键,有可能为 null
* @param function 函数,在通过key获取value为null时,将执行 {@code function#apply} 方法
* @return 如果获取的value为null,则将 {@code function#apply} 方法的返回值作为newValue,添加到缓存中,并返回
*/
Object get(Object key, Function<Object,Object> function);
}
git提交规范 - 示例
# git commit 信息应该包含 [发行版本号] + [模块] + [提交信息]
# 例如当前 org.beetl.express.Beetl 是 3.2.0,修改的内容是"语法树结点的注释",则 commit 信息为:
git commit -m '【Sprint3.3.0】【org.beetl.express.Beetl】语法树结点的注释'
Beetl 的成长离不开以下人员的帮助(排名不分先后):
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。
1. 开源生态
2. 协作、人、软件
3. 评估模型