Java脚本引擎执行 javascript 代码

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

}

你可能感兴趣的:(javascript,java,jdk,Java)