Rhino -- 基于java的javascript实现

http://www.cnblogs.com/cczw/archive/2012/07/16/2593957.html

这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘。javascript引擎大家比较熟悉的应该是当前比较火的ChromeV8引擎。以快速闻名。v8基于c++开发。这里就不多阐述了。另外一个是基于java的Rhino引擎,这个想来大家不是很了解。下面来简单介绍一下。

Rhino简介

(简介这部分是抄的)

Rhino是一种使用Java语言编写的JavaScript的开源实现,原先由Mozilla开发,现在被集成进入JDK6.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的java\jdk1.6.0\jre\lib\ext目录,mac的/System/Library/Java/Extensions/目录下。

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

javaorg.mozilla.javascript.tools.shell.Main

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

Rhino1.7release420120618

js>

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

直接写代码,效果如下:

js>vara={'name':'zhangwen','age':30}

js>a.name

zhangwen

js>a.age

30

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

functiontest(str){

varname=str;

print(name);

}

然后在console中输入:

js>load('test.js');

js>test('awen');

awen

js>

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

二Rhino中调用JAVA

不说废话,直接上代码:

js>vardate=newjava.util.Date();

js>date

MonJul1617:04:07CST2012

js>java.lang.Math.PI

3.141592653589793

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

Rhino实现Java接口:

复制代码

js>varobj={run:function(){print("\nrunning...");}}

js>varr=newjava.lang.Runnable(obj);

js>vart=newjava.lang.Thread(r);

js>t.start();

js>

running...

复制代码

Rhino创建Java数组

复制代码

js>vararray=java.lang.reflect.Array.newInstance(java.lang.String,2);

js>array[0]="恩";

js>array[1]="哦";

js>java.util.Arrays.toString(array);

[恩,哦]

复制代码

三Java对象操纵JavaScript

复制代码

importorg.mozilla.javascript.Context;

importorg.mozilla.javascript.Scriptable;

publicstaticvoidmain(String[]args){

Contextctx=Context.enter();

Scriptablescope=ctx.initStandardObjects();

StringjsStr="100*20/10";

Objectresult=ctx.evaluateString(scope,jsStr,null,0,null);

System.out.println("result="+result);

}

复制代码

相关推荐