• Rhino -- 基于java的javascript实现


    javascript引擎大家比较熟悉的应该是当前比较火的Chrome V8引擎。以快速闻名。v8基于c++开发。这里就不多阐述了。另外一个是 基于java的Rhino引擎,这个想来大家不是很了解。下面来简单介绍一下。

    Rhino简介

    (简介这部分是抄的)

    Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发,现在被集成进入JDK 6.0。与其他很多语言一样,Rhino 是一种动态类型的、基于对象的脚本语言,它可以简单地访问各种 Java 类库。Rhino 从 JavaScript 中借用了很多语法,让程序员可以快速编写功能强大的程序。最为明显的区别是,Rhino 不再使用语句结束符( ; ),放宽了变量声明规则,并且极大地简化了修改和检索对象属性的语法(没有求助于调用存取方法)。

    由于 Rhino 是 JavaScript 的一种基于 Java 的实现,所以对于 Java 开发人员来说,它应该特别易于使用。JavaScript 的(以及 Rhino 的)语法非常类似于 Java 编程语言。这两种语言都采用了与 Java 编程语言相似的循环和条件结构,并且遵循类似的语法模式来表示这些结构。

    虽然 Rhino 与本系列文章中介绍的其他编程语言具有很多共同点,但对于 Java 平台上的编程而言,它也有独特之处(可能有时有些不同的地方)。Rhino 是一种 基于原型的(prototype-based)语言,而不是一种 基于类的(class-based)语言。在 Rhino 中,您可以构建对象,而不是类。除了类的对象实例之外,这样做还可以让您避免构建和操作类的开发、部署和执行成本。正如您将在文中发现的那样,诸如 Rhino 这类基于原型的语言在开发和运行基于 GUI 的应用程序时尤其有效。

    如何使用Rhino

    你可以去Rhino的主页下载最新的源代码和文档,解压开之后有一个js.jar 这就是Rhino的库文件。Rhino应用方式我分为console,js调java,java调js三种。下面来一一阐述。

    一 console  shell命令
    相信很多技术猿们习惯使用酷酷的console控制台来敲打shell命令。可这些一般都是服务端语言。现在你也可以在控制台中敲到js代码了。用法很简单。首先要将js.jar文件放入windows的javajdk1.6.0jrelibext目录,mac的 /System/Library/Java/Extensions/目录下。

    然后你就可以在命令行中敲打

    java  org.mozilla.javascript.tools.shell.Main

    然后你就会看到像这样的输出:

    Rhino 1.7 release 4 2012 06 18
    js> 

    这样你就可以调试js代码了,这里你既可以加载js文件来运行,也可以直接运行js语法语句,并且Rhino借用了java中很多的基础语法,使我们写起代码来更easy。下面我们来试试看。

    直接写代码,效果如下:

    js> var a={'name':'zhangwen','age':30}
    js> a.name
    zhangwen
    js> a.age
    30

    新建一个test.js文件,内容如下:

    function test(str){
       var name=str;
       print(name);
    }

     

    然后在console中输入:

    js> load('test.js');
    js> test('awen');  
    awen
    js> 

    体验了这两种方式后感觉是不是很酷?

     

    二 Rhino中调用JAVA

    不说废话,直接上代码:

    js> var date=new java.util.Date();
    js> date
    Mon Jul 16 17:04:07 CST 2012
    js> java.lang.Math.PI
    3.141592653589793

    当然,你也先导入包,importPackage(java.util)(相当于java中的import package)那么代码中就不用写类名的包路径了,var date=new Date();不知道细心地同学发现没有。在javascript中也有原生的Date,那这样我们就应该避免这样的写法,防止代码中混乱。

     Rhino实现Java接口:

    复制代码
    js> var obj={run:function(){print("
    running...");}}
    js> var r=new java.lang.Runnable(obj);
    js> var t=new java.lang.Thread(r);
    js> t.start();
    js> 
    running...
    复制代码

    Rhino创建Java 数组

    复制代码
    js> var array=java.lang.reflect.Array.newInstance(java.lang.String, 2);  
    js> array[0]="恩";     
    恩
    js> array[1]="哦";
    哦
    js> java.util.Arrays.toString(array);
    [恩, 哦]
    复制代码

    三 Java对象操纵JavaScript

    复制代码
    import org.mozilla.javascript.Context;
    import org.mozilla.javascript.Scriptable;
    
    public static void main(String[] args) {
       Context ctx=Context.enter();
       Scriptable scope=ctx.initStandardObjects();
       
       String jsStr="100*20/10";
       Object result=ctx.evaluateString(scope, jsStr, null, 0,null); 
       System.out.println("result="+result);
    }
    复制代码
  • 相关阅读:
    L84
    L83
    T57
    T56
    Listen 82
    Listen81
    PyQt(Python+Qt)学习随笔:QListView的isWrapping属性
    PyQt(Python+Qt)学习随笔:QListView的movement属性
    PyQt(Python+Qt)学习随笔:QListView的gridSize属性
    第15.20节 PyQt(Python+Qt)入门学习:QColumnView的作用及开发中对应Model的使用
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13317938.html
Copyright © 2020-2023  润新知