importjava.io.File;importjava.lang.reflect.Field;importjava.util.Arrays;importjavax.script.Invocable;importjavax.script.ScriptEngine;importjavax.script.ScriptEngineManager;importjavax.script.ScriptException;public classJavaExecScriptDemo {public static voidmain(String[] args) {
System.out.println(jsObjFunc());
System.out.println(Arrays.toString(getArray()));
System.out.println(jsCalculate("a=1+2+3+(2*2)"));
jsFunction();
jsVariables();
}/*** 运行JS对象中的函数
*
*@return
*/
public staticObject jsObjFunc() {
String script=
"var obj={run:function(){return 'run method : return:\"abc'+this.next('test')+'\"';},next:function(str){return ' 我来至next function '+str+')'}}";
ScriptEngineManager sem= newScriptEngineManager();
ScriptEngine scriptEngine= sem.getEngineByName("js");try{
scriptEngine.eval(script);
Object object= scriptEngine.get("obj");
Invocable inv2=(Invocable) scriptEngine;return (String) inv2.invokeMethod(object, "run");
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** 获取js对象数字类型属性
*
*@return
*/
public staticObject[] getArray() {
ScriptEngineManager sem= newScriptEngineManager();
String script= "var obj={array:['test',true,1,1.0,2.11111]}";
ScriptEngine scriptEngine= sem.getEngineByName("js");try{
scriptEngine.eval(script);
Object object2= scriptEngine.eval("obj.array");
Class clazz =object2.getClass();
Field denseField= clazz.getDeclaredField("dense");
denseField.setAccessible(true);return(Object[]) denseField.get(object2);
}catch(Exception e) {
e.printStackTrace();
}return null;
}/*** JS计算
*
*@paramscript
*@return
*/
public staticObject jsCalculate(String script) {
ScriptEngineManager manager= newScriptEngineManager();
ScriptEngine engine= manager.getEngineByName("javascript");try{return(Object) engine.eval(script);
}catch(ScriptException ex) {
ex.printStackTrace();
}return null;
}/*** 运行JS基本函数*/
public static voidjsFunction() {
ScriptEngineManager sem= newScriptEngineManager();
ScriptEngine se= sem.getEngineByName("javascript");try{
String script= "function say(name){ return 'hello,'+name; }";
se.eval(script);
Invocable inv2=(Invocable) se;
String res= (String) inv2.invokeFunction("say", "test");
System.out.println(res);
}catch(Exception e) {
e.printStackTrace();
}
}/*** JS中变量使用*/
public static voidjsVariables() {
ScriptEngineManager sem= newScriptEngineManager();
ScriptEngine engine= sem.getEngineByName("javascript");
File file= new File("/data/js.txt");
engine.put("file", file);try{
engine.eval("println('path:'+file.getAbsoluteFile())");
}catch(ScriptException e) {
e.printStackTrace();
}
}
}