JS引擎

  在javax.script包下提供有关脚本引擎的类和接口,为我们定义了一系列的规范,达到可以在java应用程序中执行脚本语言编写的程序。

  javax.script包的主要功能有:

    1.脚本执行:执行脚本文件中的程序,使用ScriptEngine的eval方法和Invocable接口的方法。

    2.绑定:将java对象作为指定变量公开给脚本程序。相当于为脚本设置全局变量之类的。Bingdings和ScriptContext类用于此目的。

    3.编译:将脚本执行一次,生成中间代码,往后只需调用即可,实现高效率。

    4.编译功能允许重执行中间代码所表示的整个脚本,而调用功能允许重执行脚本中的个别程序或者方法

  接口:

    ScriptEngine:

      代表一个js引擎,引擎的作用就是动起来,这个引擎可以让javascript脚本跑起来。

    Bingings:

      其实就是一个Map,为ScriptEngine设置上下文,就是一些全局变量之类的。

    Compilable:

      将脚本编译成无需重新编译就能够反复执行的某种形式

    Invocable:

      执行脚本中的程序

    ScriptContext:

      引擎执行的上下文,类似ServletContext

    ScriptEngineFactory:

      ScriptEngine的工厂,通过它可以产生ScriptEngine

  类:

    AbstractScriptEngine:

      实现了ScriptEngine接口,为eval方法提供了多种实现

    CompiledScript:

      编译过的脚本,可以重复执行无需重新解析

    ScriptEngineManager:

      为ScriptEngine类实现一个发现和实例化机制,还维护一个键/值对集合来存储所有 Manager 创建的引擎所共享的状态

    SimpleBingdings:

      一个受 HashMap 或其他某些指定 Map 支持的 Bindings 的简单实现

    SimpleScriptContext:

      ScriptContext 的简单实现

  Demo:

    js文件:

function show() {

    return name + " " + age;

}

    java代码:

    @Test

    public void demo() throws Exception {

        //通过ScriptEngineManager拿到一个ScriptEngine

        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");

        //创建一个Bindings,设置变量

        Bindings bindings = engine.createBindings();

        bindings.put("name", "xujianguo");

        bindings.put("age", 21);

        //为engine设置Bindings

        engine.setBindings(bindings, ScriptContext.ENGINE_SCOPE);

        //执行脚本文件

        engine.eval(new FileReader("file/model_two.js"));

        //判断引擎的可执行性

        if(engine instanceof Invocable) {

            //转换接口类型

            Invocable invocable = (Invocable)engine;

            //执行特定的方法

            String result = (String) invocable.invokeFunction("show");

            System.out.println(result);

        }

    }

你可能感兴趣的:(js)