您的位置:首页 > Web前端 > JavaScript

Java脚本引擎执行 javascript 代码

2015-08-17 10:35 696 查看

脚本引擎执行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();
}
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: