脚本引擎执行javascript代码
- JAVA脚本引擎是从JDK6.0之后添加的新功能
- 脚本引擎介绍:
- 使得Java应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在Java平台上调用各种脚本语言的目的
- Java脚本API是连通Java平台和脚本语言的桥梁
- 可以吧一些复杂异变的业务逻辑交给脚本语言去处理,这可以大大提高开发效率
- 获得脚本引擎对象
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
代码示例:
package com.coderbean.test;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Demo01 {
public static void main(String[] args) throws ScriptException, NoSuchMethodException {
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,存储的引擎上下文中,上下文的变量msg既可以被java访问也可以被脚本访问
engine.put("msg", "zhangbo is a good man");
String str = "var user = {name:'gaoqi',age:18,schools:['清华大学','杭州电子科大']};";
str += "print(user.age);";
//执行脚本
engine.eval(str);
//脚本访问上下文变量
engine.eval("msg = 'HDU is a good school'");
System.out.println(engine.get("msg"));
System.out.println("#####################");
//定义函数
engine.eval("function add(a,b){var sum = a+b; return sum;}");
//取得调用借口
Invocable jsInvoke = (Invocable)engine;
//执行脚本中定义的方法
Object result1 = jsInvoke.invokeFunction("add", new Object[]{13,2});
System.out.println(result1);
//执行一个js文件(a.js在src下)
URL url = Demo01.class.getClassLoader().getResource("a.js");
try(FileReader fr = new FileReader(url.getPath())){
engine.eval(fr);
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}