zoukankan      html  css  js  c++  java
  • 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);
            }
        }
  • 相关阅读:
    照到抄的。C# 多线程自己写的包装器
    转的一份代码应该是 max的吧..
    WPF 里面的 Run .感觉这名称真没取好,application 里面有个 run, textblock 里面也有个.
    Marshal C#
    VS2010推荐实用插件
    Aga.Controls.Tree.TreeViewAdv使用教程之概要介绍
    文档批量下载器
    有趣,http请求接收网站
    Dictionary, KeayValuePair,HashMap,HashTable,待学补充
    kafka和zookeeper的安装
  • 原文地址:https://www.cnblogs.com/rayguo/p/3760701.html
Copyright © 2011-2022 走看看