一. Beetl 介绍
网上没搜索到 Beetl 模版引擎执行任意 Java 代码的方法,所以顺手看下文档,顺便分享下方法。
下是来自官网
的简介:
Beetl是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,它功能强大,性能良好,超过当前流行的模板引擎。而且还易学易用。
二. 执行任意 java 代码
Beetl 默认的语句界定符为
Beetl 支持用type.new
创建一个对象实例,语法有点像javascript
:
var user = type.new("com.xx.User");
Beetl 支持用 java 代码风格来调用属性和对象,例如:
${@user.getMaxFriend(“lucy”)}
${@com.xxxx.constants.Order.getMaxNum()}
var max = @com.xxxx.constants.Order.MAX_NUM;
var c =1;
var d = @user.getAge(c);
%>
结合以上三个小知识,就可以利用type.new
创建一个bcel ClassLoader
的实例,然后使用实例加载任意代码,并实例化代码,执行任意的自定义代码。当然,肯定还有其他方法,不过找到一个通用的就行了,暂时不需要深挖。
下面是一个使用Runtime exec