`
subchen
  • 浏览: 16259 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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-<version>.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 <path>: template root directory
10   -d <path>: output directory
11   -config <file>: config file

预编译完成后,请设置 compile.strategy = none

安全管理器:黑白名单

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

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

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

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

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

1 -java.lang.System.exit
2 -java.lang.reflect
3 -java.sql
4 -javax.tools
5 -java.io
6 +java.io.File.getName
7 +java.io.File.getPath
8 -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     <ul>
03         #for(News news: @NewsMgmt.getAll())
04             <li><a href="news/${news.id}">$!{news.title}</a></li>
05         #end
06     </ul>
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);
7 cache.remove("LOGIN_INFO");

新增 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"]
1
3
分享到:
评论

相关推荐

    jetbrick-template-1.2.0.zip

    【标题】"Jetbrick-Template-1.2.0.zip" 是一个开源项目的压缩包,主要涉及的是模板引擎技术。Jetbrick-Template 是一个高效、轻量级的Java模板引擎,它提供了一种简单的方式来将静态模板与动态数据结合,生成最终的...

    harbor-offline-installer-v1.2.0.tgz

    官方地址 https://github.com/vmware/harbor/releases/download/v1.2.0/harbor-offline-installer-v1.2.0.tgz,可以先尝试从官方下载,如果中断或者下载失败,可以下载此版本...harbor-offline v1.2.0 避免龟速下载安装

    cni-plugins-linux-amd64-v1.2.0.tgz

    cni-plugins-linux-amd64-v1.2.0

    javax.activation-api-1.2.0-API文档-中文版.zip

    赠送原API文档:javax.activation-api-1.2.0-javadoc.jar; 赠送源代码:javax.activation-api-1.2.0-sources.jar; 赠送Maven依赖信息文件:javax.activation-api-1.2.0.pom; 包含翻译后的API文档:javax....

    spring-plugin-core-1.2.0.RELEASE-API文档-中英对照版 .zip

    赠送jar包:spring-plugin-core-1.2.0.RELEASE.jar; 赠送原API文档:spring-plugin-core-1.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-plugin-core-1.2.0.RELEASE-sources.jar; 包含翻译后的API文档:...

    312916276899099lx-music-mobile-v1.2.0-beta.3-arm64-v8a.apk

    312916276899099lx-music-mobile-v1.2.0-beta.3-arm64-v8a.apk

    spring-plugin-core-1.2.0.RELEASE-API文档-中文版.zip

    赠送jar包:spring-plugin-core-1.2.0.RELEASE.jar; 赠送原API文档:spring-plugin-core-1.2.0.RELEASE-javadoc.jar; 赠送源代码:spring-plugin-core-1.2.0.RELEASE-sources.jar; 包含翻译后的API文档:...

    ingress-nginx-controller-v1.2.0-images用到的镜像

    ingress-nginx-controller-v1.2.0_daemonset用到的镜像,免费下载

    lx-music-mobile-v1.2.0-beta.2-universal.zip

    lx-music-mobile-v1.2.0-beta.2-universal.zip

    nacos-client-1.2.0-API文档-中文版.zip

    赠送原API文档:nacos-client-1.2.0-javadoc.jar; 赠送源代码:nacos-client-1.2.0-sources.jar; 赠送Maven依赖信息文件:nacos-client-1.2.0.pom; 包含翻译后的API文档:nacos-client-1.2.0-javadoc-API文档-...

    jadx-gui-1.2.0,中文版,反编译软件

    jadx虽然在某些复杂情况下的表现可能不如JEB,但由于它是开源的,因此可以免费使用,而且社区的活跃度高,不断有新功能和改进被添加。对于初学者和非专业用途,jadx通常是一个很好的选择。 **文件名称列表** ...

    jadx-gui-1.2.0-with-jre-win.zip

    【标题】"jadx-gui-1.2.0-with-jre-win.zip"是一个针对Windows平台的Android APK反编译工具包,包含了jadx-gui的1.2.0版本和Java运行环境(JRE)。 【描述】该工具的主要功能是帮助开发者或安全研究人员对Android...

    MuEditor-win64-1.2.0

    因为缺乏具体的文件内容描述,我无法准确地提供关于软件功能、使用方法或者开发背景等详细知识点。不过,我可以尝试根据标题中提供的信息进行一些基本的猜测和解释。 首先,“MuEditor”可能是一个文本编辑器或者...

    mybatis-spring-1.2.0.jar

    标题 "mybatis-spring-1.2.0.jar" 提供了我们正在讨论的软件组件的核心信息,即MyBatis-Spring的特定版本——1.2.0。MyBatis-Spring是MyBatis和Spring框架集成的一个库,旨在简化在Spring应用中使用MyBatis的工作。...

    mybatis-spring 1.2.0 jar包

    MyBatis-Spring 1.2.0 是一个整合了MyBatis与Spring框架的库,它使得在Spring应用中使用MyBatis变得更加方便。这个jar包是开发人员在使用MyBatis作为持久层框架,同时又依赖Spring进行依赖注入和事务管理时的重要...

    mamba-ssm-1.2.0.post1-py3-none-any.whl

    mamba_ssm-1.2.0.post1 Windows 下whl 直接 pip install 安装这个whl即可。 此为旧版本,计算缓慢,不要下载。 新版移步:https://blog.csdn.net/yyywxk/article/details/140420538

    ESPHome-Flasher-1.2.0-windows-x64.exe

    esphome下载器,用于esp8266以及esp32 的刷写。 ESPHome-Flasher-1.2.0-windows-x64

    calcite-core-1.2.0-incubating-API文档-中文版.zip

    赠送jar包:calcite-core-1.2.0-incubating.jar; 赠送原API文档:calcite-core-1.2.0-incubating-javadoc.jar; 赠送源代码:calcite-core-1.2.0-incubating-sources.jar; 赠送Maven依赖信息文件:calcite-core-...

    spring-plugin-core-1.2.0.RELEASE.jar

    spring-plugin-core-1.2.0.RELEASE

    etcd-manager-1.2.0-win64.exe

    etcd-manager-1.2.0-win64 etcd数据库管理客户端

Global site tag (gtag.js) - Google Analytics