Jetbrick-template 1.2.0 发布,新增预编译功能

简介:

Jetbrick-template-1.2.0 发布,新增预编译功能。

具体更新内容如下:

功能更新

[新增] #38 增加默认的 #tag cache() 实现模板局部缓存功能
[新增] #49 增加模板预编译工具/选项
[新增] #54 增加安全管理器:黑白名单
[新增] #62 在 Web 环境中使用 jetx 时候,建议增加一个隐藏变量
[新增] #63 对 Array/List/Map 的 [] 访问,增加安全调用
[新增] #64 Spell error in JetAnnoations Class name, Should be JetAnnotations.
[新增] #65 给 #for 指令内部对象增加 for.odd 和 for.even 支持.

模板的预编译选项

原来有个编译参数 compile.always 是用来控制在首次访问的时候,是强制进行编译还是从上次编译的结果直接load编译好的class。
而新版本则更进一步,提供了更加灵活的编译策略,目前有 4 种可以选择:

1 compile.strategy = precompile
2 compile.strategy = always
3 compile.strategy = auto
4 compile.strategy = none
compile.always 已作废。

precompile
在 JetEngine 初始化的时候,自动获取所有的模板(根据 template.suffix 过滤),然后启动一个独立的线程进行编译。
这样虽然启动时间会增加,但是后面的模板访问将会非常的快。并且在预编译没有完成期间,应用可以正常访问,不冲突。

always (默认值)
和原先的 compile.always = true 等价。
就是在模板被首次访问的时候,进行编译。

auto
和原先的 compile.always = false 等价。
就是在模板被首次访问的时候,如果磁盘中已经存在编译好的 Class 文件(并且源文件没有改变),那么直接加载该 Class 文件,否则进行编译。

none
改模式下,将不在对模板进行编译。(发布的时候,用户无需发布任何模板源文件)
用户必须通过 JetxGenerateApp 预编译工具,事先将模板全部编译成 class 文件,并将所有的 class 文件放在 classpath 下面。
注意: class 文件放在 classpath 下面,而不是 compile.path 对应的目录。

注意:
不管采用什么模式,对于使用 JetEngine.createTemplate(source) 直接由源码创建的模板,仍然需要进行编译。

JetxGenerateApp 预编译工具

用户可以在外部通过命令行调用,将所有的模板进行预编译,这样生产环境可以直接使用预编译好的 Class 文件,减少首次访问时候的延迟。

01 shell # java -jar jetbrick-template-.jar \
02 -all \
03 -src /webapp/templates \
04 -d /webapp/generatedClasses \
05 -config /webapp/WEB-INF/jetbrick-template.properties
06
07 options:
08 -all: compile all templates even if errors
09 -src : template root directory
10 -d : output directory
11 -config : config file
预编译完成后,请设置 compile.strategy = none。

安全管理器:黑白名单

安全管理器主要用于对模板中调用类,方法和访问字段进行安全管理。主要用于类似于 CMS 系统中,需要用户自定义模板的时候时候,防止用户访问未经授权的内容。

安全管理器默认通过一个黑白名单列表来实现。黑白名单可以放在一个单独的文本文件中,也可以直接放在配置文件中。用户也可以实现自定义的安全管理器。

安全管理器默认禁用,如需使用,需要如下的配置:

security.manager = jetbrick.template.parser.JetSecurityManagerImpl
security.manager.file = ${webapp.dir}/WEB-INF/jetx-white-black-list.txt

jetx-white-black-list.txt 范例内容如下:

-java.lang.System.exit
-java.lang.reflect
-java.sql
-javax.tools
-java.io
+java.io.File.getName
+java.io.File.getPath
-sun

提示:
安全管理器只在对模板进行解析编译的时候进行,运行期不会影响任何性能。

新增 ctxpath/webroot 全部变量和函数

其中 2 个变量:

ctxpath == request.getContextPath() 
webroot == http:// : + request.getContextPath()

同时支持函数方式调用:

如:

1 ${ctxpath("/index.jetx")}
2 ${webroot("/index.jetx")}

增加 #tag cache 实现缓存模板片段

01 #tag application_cache("NEWS_LIST", 60 * 60)
02


07 #end
08
09 #tag session_cache("LOGIN_INFO", 5 * 60)
10 Welcome ${loginedUser.name},
11 Logined at ${loginedUser.lastdate}
12 #end
以上新闻信息会被自动缓存 1 小时, 而用户的登录信息会缓存 5 分钟。

如果需要临时清楚缓存,可以通过如下代码:

1 // application_cache
2 TimedSizeCache cache = (TimedSizeCache) servletContext.getAttribute(TimedSizeCache.CACHE_KEY);
3 cache.remove("NEWS_LIST");
4
5 // session_cache
6 TimedSizeCache cache = (TimedSizeCache) session.getAttribute(TimedSizeCache.CACHE_KEY);
cache.remove("LOGIN_INFO");

7

新增 for.odd, for.even

据需增强 for 循环状态对象。

1 #for (User user: userlist)
2 #if (for.odd)
3 ...
4 #end
5 #if (for.even)
6 ...
7 #end
8 #end

对 Array/List/Map 的 [] 访问,增加安全调用

现在支持如下调用拉

1 array?[index]
2 list?[index]
3 map?["key"]

文章转载自 开源中国社区 [http://www.oschina.net]

相关文章
|
2月前
|
JavaScript
在Vue中,如何编写自定义的验证规则?
在Vue中,如何编写自定义的验证规则?
22 1
|
3月前
|
前端开发
Antd中Table列表行默认包含修改及删除功能的封装
Antd中Table列表行默认包含修改及删除功能的封装
48 0
|
4月前
|
索引
第19节:Vue3 在模板中展开时的注意事项
第19节:Vue3 在模板中展开时的注意事项
23 0
|
9月前
|
设计模式 算法 Go
Go的模板方式模式
模板方法模式是一种行为设计模式,它在一个抽象类中定义了一个算法的骨架,允许子类为算法的某些步骤提供具体实现。它促进了代码的重用,并为一组相关算法定义了一个通用的结构。
36 0
|
5月前
|
Oracle Java 关系型数据库
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
Generator【SpringBoot集成】代码生成+knife4j接口文档(2种模板设置、逻辑删除、字段填充 含代码粘贴可用)保姆级教程(注意事项+建表SQL+代码生成类封装+测试类)
28 0
|
7月前
|
Go
Go 1.18 新增三大功能之一“泛型”怎么使用?
Go 1.18 新增三大功能之一“泛型”怎么使用?
37 0
|
7月前
|
安全 测试技术 Go
Go 1.18 新增三大功能之一“模糊测试”使用方式
Go 1.18 新增三大功能之一“模糊测试”使用方式
32 0
|
11月前
|
开发工具 git
从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库
从0搭建Vue3组件库(八):使用 release-it 实现自动管理发布组件库
127 0
hook+ts业务开发思路5-完成列表页面的编写
hook+ts业务开发思路5-完成列表页面的编写
46 0
hook+ts业务开发思路5-完成列表页面的编写
|
Web App开发 缓存 测试技术
模板插件aTpl.js新增功能
模板插件aTpl.js新增功能

热门文章

最新文章