JDK1.8中内置了Nashorn JavaScript引擎,无需再导包;java中的javax.script,它开始存在于JDK1.6,它可以解析通用的表达式
java代码中编写脚本语言:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class ScriptExec
{
public static void main(String[] args) throws ScriptException
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine script = manager.getEngineByName("javascript");
script.eval("var a = 3;var b = 4;print(a+b)");
}
}
载入js文件
// test.js
function countNum(num1,num2){
var num = num1+num2;
return num;
}
public class ScriptExec
{
public static void main(String[] args) throws ScriptException, Exception
{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine script = manager.getEngineByName("javascript");
FileReader reader = new FileReader("F:\\Workspace\\springboot\\src\\test\\java\\springboot\\test.js");
script.eval(reader);//执行js,但是可能文件中有多个函数
if(script instanceof Invocable){
Invocable invoke = (Invocable)script;
Double v = (Double)invoke.invokeFunction("countNum", 1,2);//执行js文件中的指定函数
System.out.println(v);
}
reader.close();
}
}
如上:(Invocable)script 由强转得到,不太清楚ScriptEngine 与 Invocable之间的关系. 有知道的网友希望能告知下,谢谢~
如果被调用的js中含有其他js文件的函数,就会异常 not defined