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);
        }
    }
时间: 2024-12-15 11:58:14

JS引擎的相关文章

浏览器内核、渲染引擎、js引擎

[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: firefox使用gecko引擎 IE使用Trident引擎 2015年微软推出自己新的浏览器,原名叫斯巴达,后改名edge,使用edge引擎 opera最早使用Presto引擎,后来弃用 chrome\safari\opera使用webkit引擎 13年chrome和opera开始使用Blink引擎 js

单线程的JS引擎

先来思考一个问题,JS 是单线程的么?为什么单线程的JavaScript却能让AJAX异步发送和回调请求,还有setTimeout也看起来像是多线程的?还有non-blocking IO, event loop等概念. 目录: JS单线程 浏览器多线程 setTimeout(func, 0) 的应用场景 setTimeout与setInterval 参考资料 TODO: 接下来,梳理JS的并发模型与 Event Loop https://developer.mozilla.org/zh-CN/d

【转】浏览器内核、渲染引擎、js引擎

[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎(内核): firefox使用gecko引擎 IE使用Trident引擎 2015年微软推出自己新的浏览器,原名叫斯巴达,后改名edge,使用edge引擎 opera最早使用Presto引擎,后来弃用 chrome\safari\opera使用webkit引擎 13年chrome和opera开始使用Blink引

【repost】浏览器内核、渲染引擎、js引擎

[1]定义 浏览器内核分成两部分渲染引擎和js引擎,由于js引擎越来越独立,内核就倾向于只指渲染引擎 渲染引擎是一种对HTML文档进行解析并将其显示在页面上的工具 [2]常见引擎 渲染引擎: firefox使用gecko引擎 IE使用Trident引擎 2015年微软推出自己新的浏览器,原名叫斯巴达,后改名edge,使用edge引擎 opera最早使用Presto引擎,后来弃用 chrome\safari\opera使用webkit引擎 13年chrome和opera开始使用Blink引擎 js

java调用javascript :js引擎rhino

java调用javascript :js引擎rhino JavaJavaScriptEclipse脚本SQL 前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式.结果方案五花八门:1.jakarta commons JEXL. 2.Beanshell3.Java Math Expression Parser jep 4.parse combinator jparsec 5.jdk 6.0的 script6.利用SQL 7.自己写语法分析如果自己写语法分析,没有个200

javascript从定义到执行 js引擎 闭包

javascript从定义到执行,JS引擎在实现层做了很多初始化工作,因此在学习JS引擎工作机制之前,我们需要引入几个相关的概念:执行环境 栈.全局对象.执行环境.变量对象.活动对象.作用域和作用域链等,这些概念正是JS引擎工作的核心组件.这篇文章的目的是孤立的为你讲解每一个概念,而 是通过一个简单的demo来展开分析,全局讲解JS引擎从定义到执行的每一个细节,以及这些概念在其中所扮演的角色. var x = 1;  //定义一个全局变量 x function A(y){ var x = 2; 

在Android上使用Google V8 JS 引擎

在cantk-runtime中直接使用的webview,通过JAVA扩展接口把Canvas的2d Context的API定向到JNI,通过OpenGL来图形加速,渲染速度大大提高.后来测试发现在大部分手机上都很正常,但是在有的老手机上速度不稳定,出现突然卡顿的情况.经过研究发现原因是老版本的webkit里没有requestAnimationFrame这个接口(或类似接口),用setTimeout来模拟的requestAnimationFrame非常不稳定. 为了解决这个问题,我们决定像其它Run

用NAN简化Google V8 JS引擎的扩展

通过C++扩展Google V8 JS引擎的文章很多,Google V8 JS带的例子也容易明白.但是大部分文章都是Hello World型的,真正使用时发现处处是坑.扩展V8最经典的例子就是node了,如果要做实际项目,研究一下node本身和及其扩展模块大有裨益. 提到node的C++扩展就不得不提nan,nan是Native Abstractions for Node.js的简称,它让扩展V8变得很容易,特别是用类来扩展的时候. 类从ObjectWrap继承过来,如: class Locat

浏览器内核、排版引擎、js引擎

[定义] 浏览器最重要或者说核心的部分是“Rendering Engine”,可大概译为“渲染引擎”,不过我们一般习惯将之称为“浏览器内核”.负责对网页语法的解释(如标准通用标记语 言下的一个应用HTML.JavaScript)并渲染(显示)网页. 所以,通常所谓的浏览器内核也就是浏览器所采用的渲染引擎,渲染引擎决定了浏览器如何显示网页的内容以及 页面的格式信息.不同的浏览器内核对网页编写语法的解释也有不同,因此同一网页在不同的内核的浏览器里的渲染(显示)效果也可能不同,这也是网页编写者需要在不