# Beetl 3中文文档
Beetl作者:李家智(闲大赋) <[xiandafu@126.com](mailto:xiandafu@126.com)> ,以下是作者微信个人公众号
![gzh](https://img.kancloud.cn/11/07/1107c49aa99164fadeac77e41e5c60f1_258x258.jpg)
## 什么是Beetl
Beetl( 发音同Beetle ) 目前版本是3.14,相对于其他java模板引擎,具有功能齐全,语法直观,性能超高,以及编写的模板容易维护等特点。使得开发和维护模板有很好的体验。同时,Beetl具备引擎可定制性,可以打造自己的模板引擎。总得来说,它的特性如下:
- 功能完备:作为主流模板引擎,Beetl具有相当多的功能和其他模板引擎不具备的功能。适用于各种应用场景,从对响应速度有很高要求的大网站到功能繁多的CMS管理系统都适合。Beetl本身还具有很多独特功能来完成模板编写和维护,这是其他模板引擎所不具有的。
- 非常简单:类似Javascript语法和习俗,只要半小时就能通过半学半猜完全掌握用法。拒绝其他模板引擎那种非人性化的语法和习俗。同时也能支持html 标签,使得开发CMS系统比较容易
- 超高的性能:Beetl 远超过主流java模板引擎性能(引擎性能5-6倍于FreeMarker,2倍于JSP。参考附录),而且消耗较低的CPU。
- 易于整合:Beetl能很容易的与各种web框架整合,如Spring MVC,SpringBoot,ACT.JFinal,Struts,Nutz,Jodd,Servlet等。
- 扩展和个性化:Beetl支持自定义方法,格式化函数,虚拟属性,标签,和HTML标签. 同时Beetl也支持自定义占位符和控制语句起始符号也支持使用者完全可以打造适合自己的工具包。
- 模板引擎可以个性化定制,比如定制语法特性,定制语法实现。
- 可以扩展为脚本引擎,规则引擎,能定制引擎从而实现高级功能。
## 小白如何开始
- 需要通读基本用法,大部分都是讲解语法,而语法跟js很接近,所以可以快速预览,但Beetl是针对模板设计, 所以像安全输出,标签和html标签,全局变量,临时变量和共享变量,布局技术,以及直接调用java代码等还需要认真读一遍。
- 如果从事web开发,还需要阅读web集成里的第一节“web提供的全局变量”,如果web里还使用ajax技术,可以阅读“整合ajax的局部渲染技术”。
- 包含有spring,jfinal,jodd,struts 等demo可以作为参考学习用https://git.oschina.net/xiandafu 任何问题,都可以在ibeetl.com 社区上提问。目前答复率是100%,提问需要详细说明自己的期望,出错信息,附上代码或者图片
## 模板性能
作为模板引擎的性能 ,Score越大越好
https://gitee.com/xiandafu/beetl/tree/master/template-benchmark
```
Benchmark Mode Cnt Score Error Units
Beetl.benchmark thrpt 10 163259.294 ± 881.253 ops/s
Enjoy.benchmark thrpt 10 146012.967 ± 2158.580 ops/s
Freemarker.benchmark thrpt 10 45228.490 ± 185.590 ops/s
Handlebars.benchmark thrpt 10 42875.302 ± 189.893 ops/s
Rocker.benchmark thrpt 10 95740.184 ± 513.397 ops/s
Thymeleaf.benchmark thrpt 10 12981.396 ± 130.663 ops/s
Velocity.benchmark thrpt 10 14120.852 ± 291.371 ops/s
```
## 表达式性能
作为脚本语言,表达式语言的性能 ,Score越大越好
https://gitee.com/xiandafu/beetl/tree/master/express-benchmark
```
Benchmark Mode Cnt Score Error Units
Aviator.forExpresss thrpt 5 501413.321 ± 4657.336 ops/s
Aviator.ifExpresss thrpt 5 4699456.542 ± 266831.101 ops/s
Aviator.simpleExpress thrpt 5 3868701.018 ± 38439.986 ops/s
Beetl.forExpresss thrpt 5 1685875.017 ± 28454.020 ops/s
Beetl.ifExpresss thrpt 5 4461489.443 ± 78687.317 ops/s
Beetl.reflect thrpt 5 62972.088 ± 85785.390 ops/s
Beetl.simpleExpress thrpt 5 4328852.130 ± 144586.699 ops/s
Groovy.ifExpresss thrpt 5 119493.364 ± 1472.301 ops/s
Groovy.simpleExpress thrpt 5 121724.720 ± 1533.726 ops/s
Jexl3.forExpresss thrpt 5 789815.632 ± 42390.393 ops/s
Jexl3.ifExpresss thrpt 5 4500714.752 ± 138214.400 ops/s
Jexl3.simpleExpress thrpt 5 3901843.173 ± 125472.114 ops/s
JfireEL.ifExpresss thrpt 5 28337464.920 ± 291859.385 ops/s
JfireEL.simpleExpress thrpt 5 18824292.084 ± 103241.504 ops/s
Mvel.forExpresss thrpt 5 11954.857 ± 84.105 ops/s
Mvel.ifExpresss thrpt 5 230373.242 ± 1827.288 ops/s
Mvel.simpleExpress thrpt 5 316083.646 ± 1320.717 ops/s
Nashorn.ifExpresss thrpt 5 10010.541 ± 752.057 ops/s
Nashorn.simpleExpress thrpt 5 8993.022 ± 518.940 ops/s
Spel.ifExpresss thrpt 5 850338.540 ± 41826.542 ops/s
Spel.simpleExpress thrpt 5 636251.839 ± 2553.017 ops/s
```
## 联系作者
* 作者:闲.大赋 (李家智)等(参考附录查看代码贡献者)
* QQ技术交流群:219324263 636321496
* 邮件:[xiandafu@126.com](mailto:xiandafu@126.com)
* 源码主页:https://gitee.com/xiandafu/beetl
## 新手必看
在线体验和代码分享 http://ibeetl.com/beetlonline/ ,可以在线学习Beetl的语法
## 第三方提供的免费视频
以一个博客项目,实战使用
项目git地址:https://gitee.com/gavink/beetl-blog
视频地址:下载下来会更清晰,视频比较长,可使用倍速看
百度网盘下载: https://pan.baidu.com/s/1LyxAxlKpVXgVjwSXIbzBuA 提取码: 68im
在线播放地址:bilibili (可以调节清晰度): https://www.bilibili.com/video/av36278644/?p=9
博客目录:https://my.oschina.net/u/1590490?tab=newest&catalogId=6214598
### Beetl与Vue,React框架的冲突
模板是一种设计模式,只要这种设计模式存在,就有Beetl的用武之地。Beetl可以用于
* 动态页面生成,网站,后台管理系统等
* 静态内容生成,比如互联网世界的大部分静态网页的生成
* 短信,微信,邮件内容等生成
* 二进制文档生成,比如PDF,Word (需要通过模板生成中间文本格式,如markdown,xml,然后通过工具转成二进制)
Vue,React等JS框架符合现在前后端分离,但不代表所有项目,所有需求都是这样。除非你只定位自己是搞前后端分离的
一个项目,既可以用上Beetl,也可以用上Vue,比如Beetl+Vue,或者使用Beetl完成项目中的其他需求
- 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 在页面输出错误提示信息
- 附录
- 4.1 内置方法
- 4.2 Spring相关函数
- 4.3 Spring security
- 4.4 shiro
- 4.5 内置格式化方法
- 4.6 内置标签函数
- 4.7 内置html标签
- 4.8 性能优化
- 4.9 Eclipse 插件
- 4.10 性能测试对比