参考链接:http://www.cnblogs.com/zouhao/p/3644788.html
java中的ScriptEngineManager 可以用于解析脚本和运行脚本语言。
简单的运行脚本样例:
package com.eastcom.first.spark.data.script;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ListScriptEngines {
public static void main(String args[]) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
Double hour = (Double) engine.eval("var date = new Date();" + "date.getHours();");
System.out.println("hour : " + hour);
}
}
运行结果:
hour : 14.0
和脚本语言进行交互
上面例子只是运行了一个非常简单的脚本。这个脚本是孤立的,并未通过Java向这脚本传递任何的值。虽然从这个脚本返回了一个值,但这种返回方式是隐式的。
脚本引擎除了这些简单的功能,还为我们提供了更强大的功能。甚至可以通过Java向脚本语言中传递参数,还可以将脚本语言中的变量的值取出来。这些功能要依靠ScriptEngine中的两个方法put和get。
put 有两个参数,一个是脚本变量名,另一个是变量的值,这个值是Object类型,因此,可以传递任何值。
get 有一个参数,就是脚本变量的名。
下面的代码通过javascript脚本将一个字符串翻转(这个字符串是通过java传给javascript的),然后通过java得到这个被翻转后的字符后,然后输出。
样例:
package com.eastcom.first.spark.data.script;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ReverseString {
public static void main(String args[]) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
engine.put("name", "abcdefg");
engine.eval("var output ='' ;" + "for (i = 0; i <= name.length; i++) { " + " output = name.charAt(i) + output"
+ "}");
String name = (String) engine.get("output");
System.out.printf("被翻转后的字符串:%s", name);
}
}
运行结果:
被翻转后的字符串:gfedcba
更多详解参考上面链接。