## 1.3 模板基础配置
Beetl提供不但功能齐全,而且还有很多独特功能,通过简单的配置文件,就可以定义众多的功能,默认情况下,Configuration类总是会先加载默认的配置文件(位于/org/beetl/core/beetl-default.properties,作为新手,**通常只需要关注3,4,5,6行定界符的配置,以及12行模板字符集的配置就可以了**,其他配置会在后面章节陆续提到,同时,对于Spring等框架,有些配置将会被这些框架的配置覆盖,需要参考后面章节)下,beetl-default.properties其内容片断如下:
```properties
#默认配置
ENGINE=org.beetl.core.engine.FastRutimeEngine
DELIMITER_PLACEHOLDER_START=${
DELIMITER_PLACEHOLDER_END=}
DELIMITER_STATEMENT_START=<%
DELIMITER_STATEMENT_END=%>
DIRECT_BYTE_OUTPUT = FALSE
HTML_TAG_SUPPORT = true
HTML_TAG_FLAG = #
HTML_TAG_BINDING_ATTRIBUTE = var
#3.17版本以后,默认不再支持Java直接调用
NATIVE_CALL = FALSE
TEMPLATE_CHARSET = UTF-8
ERROR_HANDLER = org.beetl.core.ConsoleErrorHandler
#3.17版本以后,使用白名单管理Java直接调用
NATIVE_SECUARTY_MANAGER= org.beetl.core.WhiteListNativeSecurityManager
MVC_STRICT = FALSE
#资源配置,resource后的属性只限于特定ResourceLoader
RESOURCE_LOADER=org.beetl.core.resource.ClasspathResourceLoader
#classpath 根路径
RESOURCE.root= /
#是否检测文件变化,开发用true合适,但线上要改为false
RESOURCE.autoCheck= true
#自定义脚本方法文件的Root目录和后缀
RESOURCE.functionRoot = functions
RESOURCE.functionSuffix = html
#自定义标签文件Root目录和后缀
RESOURCE.tagRoot = htmltag
RESOURCE.tagSuffix = tag
##### 扩展 ##############
## 内置的方法
FN.date = org.beetl.ext.fn.DateFunction
......
##内置的功能包
FNP.strutil = org.beetl.ext.fn.StringUtil
......
##内置的默认格式化函数
FTC.java.util.Date = org.beetl.ext.format.DateFormat
.....
## 标签类
TAG.include= org.beetl.ext.tag.IncludeTag
TAG.html.include= org.beetl.ext.tag.html.IncludeResourceHtmlTag
TAG.html.foreach= org.beetl.ext.tag.html.ForeachHtmlTag
```
> 如上配置是系统默认配置
这配置文件整体说明了Beetl提供的功能
第2行配置引擎实现类,默认即可.
第3,4行指定了占位符号,默认是`${` `}`,也可以指定为其他占位符。
第5,6行指定了语句的定界符号,默认是`<% ` ` %>`,也可以指定为其他定界符号
第7行指定IO输出模式,默认是FALSE,即通常的字符输出,在考虑高性能情况下,可以设置成`true`。详细请参考高级用法
第8,9行指定了支持HTML标签,且符号为#,默认配置下,模板引擎识别`<#tag ></#tag>`这样的类似html标签,并能调用相应的标签函数或者模板文件。你也可以指定别的符号,如**bg:** 则识别`<bg:`
第10行 指定如果标签属性有`var`,则认为是需要绑定变量给模板的标签函数
第11行指定允许本地Class直接调用,默认不允许。在3.17之前默认允许,具体查看https://www.oschina.net/news/306548/beetlsql-3-17-released
第12行指定模板字符集是**UTF-8**
第13行指定异常的处理类,默认是**ConsoleErrorHandler**,他将在render发生异常的时候在后台打印出错误信息(`System.out`)。另外一种更常见的配置是使用ReThrowConsoleErrorHandler,他将在render发生异常的时候在后台打印出错误信息并抛出异常
第14行指定了本地Class调用的安全策略,采用的是白名单管理方式,允许调用java.util下的所有类和方法。在3.·17版本之前
第15行配置了是否进行严格MVC,通常情况下,此处设置为false.
第18行指定了默认使用的模板资源加载器,注意,在beetl与其他MVC框架集成的时候,模板加载器不一定根据这个配置,比如spring,他的RESOURCE_LOADER以spring的配置为准
第20到22行配置了模板资源加载器的一些属性,如设置根路径为/,即Classpath的顶级路径,并且总是检测模板是否更改
第23行配置了自定义的方法所在的目录以及文件名后缀。beetl既支持通过java类定义方法,也支持通过模板文件来定义方法
第26行配置了自定义的html标签所在的目录以及文件名后缀。beetl既支持通过java类定义标签,也支持通过模板文件来定义标签
第31行注册了一个`date`方法,其实现类是`org.beetl.ext.fn.DateFunction`
第34行注册了一个方法包`strutil`,其实现类`org.beetl.ext.fn.StringUtil`,此类的每个`public`方法都将注册为beetl的方法
第37行注册了一个日期格式化函数
第40行注册了一个`include`标签函数
模板开发者不需要关心如上配置,可以创建一个beetl.properties的配置文件,此时,该配置文件将覆盖默认的配置文件属性,比如,你的定界符考虑是`<!--:` 和 `-->` ,则在**beetl.properties**加入一行即可,并将此配置文件放入Classpath根目录下即可。 Configuration.defaultConfiguration()总是先加载系统默认的,然后再加载Beetl.properties的配置属性,如果有重复,用后者代替前者的配置
```properties
#自定义配置
DELIMITER_STATEMENT_START=<!--:
DELIMITER_STATEMENT_END=-->
DELIMITER_PLACEHOLDER_START=#{
DELIMITER_PLACEHOLDER_END=}
```
3.0 以后版本支持第二对占位符,定界符
```properties
DELIMITER_STATEMENT_START2=@
DELIMITER_STATEMENT_END2=
DELIMITER_PLACEHOLDER_START2=${
DELIMITER_PLACEHOLDER_END2=}
```
3.5 以后,可以增加一个自定义类来根据模板名称来返回定界符,如`.java`结尾的模板,和`.html`的模板,可以使用不同的占位符
```
DELIMETER_CONFIG=xxx.yourDelimeterConfig
```
> 参考单元测试源码org.beetl.core.engine.MyEngineTest.testDelimeter,使用自定义MyDelimeterConfig
3.6以后,增加了对模板缓存的设置
```
CACHE=org.beetl.core.impl.cache.DefaultBeetlCache
```
3.13以后,增加了对输出流复用buffer以提高性能,默认不开启
```
CACHE_OUTPUT_BUFFER=0
```
如果配置成一个非0的数字,则在String str = template.render() 方法输出string时候,使用内部的长度为此的一个buffer缓存。能显著提高性能。
3.15 后,如果计算需要精度计算,用于脚本引擎,可以设置为true,这样,每个数字,都将是BigDecimal类型
```
## 如果为true,所有数字表示为BigDecimal,精度计算
BIGDECIMAL=false
```
3.17后,考虑到国内对安全漏洞的审查严格,如果模板能被用户编辑和执行,那么允许模板Java调用可能产生安全漏洞,因此默认禁止安全调用,即使打开后,安全管理器也使用白名单方式。如果要恢复到3.17之前配置,可以改成如下
```
NATIVE_CALL = true
NATIVE_SECUARTY_MANAGER= org.beetl.core.DefaultNativeSecurityManager
```
其他可选有
* org.beetl.core.impl.cache.LRUBeetlCache, 可以设置一个最大容量,经常访问的模板保留,超过最大容量,不经常访问的模板自动删除,默认保留256个,如果需要配置个数,可以设置CACHE.SIZE=1024或者更大
* org.beetl.core.impl.cache.CaffeineCache ,使用Caffeine库,默认保留256个,且超过30分钟没有再访问的的模板,自动删除
如果需要设置个数,可以设置CACHE.SIZE=1024或者更大,如果需要设置时间,可以设置CACHE.DURATION=10 ,表示10分钟过期
```java
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
<version>2.9.2</version>
</dependency>
```
- 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 性能测试对比