## 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 性能測試對比