//定义
function test(){
var a=3;
var b=5;
print("invoke js file:"+(a+b));
}
//执行
test();
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.List;
/**
* 测试脚本引擎执行javascript代码
*/
public class Demo01 {
public static void main(String[] args) throws ScriptException, NoSuchMethodException, IOException {
//获取脚本引擎对象
ScriptEngineManager manager=new ScriptEngineManager();
ScriptEngine engine=manager.getEngineByName("javascript");
//定义变量,存储在引擎上下文中
engine.put("zhang","is a good man!");
String string="var user={name:'zhang',age:21,school:['清华大学','西安工业']};";
string += "print(user.name);";//jdk1.6用println()
//执行脚本
engine.eval(string);
engine.eval("zhang='very good';");
System.out.println(engine.get("zhang"));
System.out.println("########################");
//定义函数
engine.eval("function add(a,b){var sum=a+b;return sum;}");
//取得调用接口
Invocable jsInvoke=(Invocable)engine;
//执行脚本定义的方法
Object result=jsInvoke.invokeFunction("add",new Object[]{23,32});
System.out.println(result);
//导入其他Java包,使用其他Java类
//jdk1.6的使用方法规则 1.8已经不适用了
//String jsCode = "importPackage java.util; var list = Arrays.asList([\"北京尚学堂\",\"清华大学\",\"北京大学\"]);";
//jkd1.8的使用规则如下:
//String jsCode1 = "var list = java.util.Arrays.asList([\"北京尚学堂\",\"清华大学\",\"北京大学\"]);";
String jsCode="var list=java.util.Arrays.asList([\"西安工业\",\"清华大学\"])";
engine.eval(jsCode);
List<String> list=(List<String>)engine.get("list");
for (String s:list
) {
System.out.println(s);
}
//执行一个js文件(我们将test.js文件置于src下即可
URL url=Demo01.class.getClassLoader().getResource("test.js");
FileReader fr=new FileReader(url.getPath());
engine.eval(fr);
fr.close();
}
}