Rhino -- 基于java的javascript实现

标签: rhino java javascript | 发表时间:2016-06-12 16:38 | 作者:m635674608
出处:http://www.iteye.com

这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘。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的java\jdk1.6.0\jre\lib\ext目录,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("\nrunning...");}}
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);
}

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



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [rhino java javascript] 推荐:

Rhino -- 基于java的javascript实现

- - 编程语言 - ITeye博客
这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘. javascript引擎大家比较熟悉的应该是当前比较火的Chrome V8引擎. 另外一个是 基于java的Rhino引擎,这个想来大家不是很了解. Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发,现在被集成进入JDK 6.0.

Android中Java和JavaScript交互

- - 极客521 | 极客521
Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是一个很举足轻重的脚本. 本文将介绍如何实现Java代码和Javascript代码的相互调用. 实现Java和js交互十分便捷. WebView开启JavaScript脚本执行. WebView设置供JavaScript调用的交互接口.

Atmosphere 1.0:支持Java/JavaScript的异步通信框架

- - InfoQ cn
Atmosphere 1.0是一个新的Java/Scala/Groovy框架,它试图将Web浏览器与应用服务器之间的通信抽象出来. 在Web Socket、HTML5服务器端事件和其他特定于应用服务器的解决方案可用时,该框架可以透明地支持,此外还可将长轮询作为一种备选方案. 最初,Web应用程序是采用客户端/服务器模型构建的,始终由客户端向服务器发起连接.

用JavaScript编写一个Java虚拟机?谈谈哗众取宠的BicaVM

- mazhechao - cnBeta.COM
今日目睹某网络新闻,开篇明义便包含如下几行文字【程序员Artur Ventura,这位超级大牛,用JavaScript写了一个java虚拟机BicaVM】. 继而再读,惊见其中“超级大牛”、“神人”等溢美之词不绝于耳,崇拜、神往之心溢于言表. 仿佛BicaVM就是天上有地下无的创举,仿佛Artur Ventura就是继比尔盖茨,乔布斯之后的第三位IT业领军人.

Javascript诞生记

- Milido - 阮一峰的网络日志
二周前,我谈了一点Javascript的历史. 今天把这部分补全,从历史的角度,说明Javascript到底是如何设计出来的. 只有了解这段历史,才能明白Javascript为什么是现在的样子. 我依据的资料,主要是Brendan Eich的自述. "1994年,网景公司(Netscape)发布了Navigator浏览器0.9版.

JavaScript,你懂的

- dylan - keakon的涂鸦馆
经常有人问我,JavaScript应该怎么学. 先学基本语法,如果曾学过C等语言,应该1小时内就能掌握了. 再去使用内置的函数、方法和DOM API,熟悉它能干什么;而在学习DOM API的过程中,你还不得不与HTML和CSS打交道. 然后弄懂匿名函数和闭包,学会至少一个常用的JavaScript库(例如jQuery).

Javascript 里跑Linux

- rockmaple - Shellex&#39;s Blog
牛逼到暴的大拿 Fabrice Bellard,用Javascript实现了一个x86 PC 模拟器,然后成功在这个模拟器里面跑Linux(请用Firefox 4 / Google Chrome 11打开,Chome 12有BUG). 关于这个东西… 伊说 “I did it for fun“,大大啊大大啊….

高效 JavaScript

- xtps - ITeye论坛最新讨论
传统上,网页中不会有大量的脚本,至少脚本很少会影响网页的性能. 但随着网页越来越像 Web 应用程序,脚本的效率对网页性能影响越来越大. 而且使用 Web 技术开发的应用程序现在越来越多,因此提高脚本的性能变得很重要. 对于桌面应用程序,通常使用编译器将源代码转换为二进制程序. 编译器可以花费大量时间优化最终二进制程序的效率.

你得学JavaScript

- 蒋冰 - 伯乐在线 -博客
  注:本文由 敏捷翻译 - 蒋少雄 翻译自 Kenny Meyers 的博文.   如果三年前你问我应该学什么语言,我会告诉你是Ruby.   如果你现在想学一门语言的话,你应该学习JavaScript..   我认为,每一位Web开发人员都应该学习JavaScript. 目前推出的许多新技术都支持这个观点.

javascript 贪食蛇

- Xin - 博客园-首页原创精华区
我的程序用javascript与Html中的table结合,实现的简单的贪食蛇游戏,游戏的主要特点,可调整蛇移动速度,可调整蛇移动范围,碰壁、咬到身体则“Game Over. 游戏并不完善,只是实现了主要的功用,有设计不合理的地方,欢迎您感大家提意见.        实现方法:由javascript语言中的setInterval方法驱动整个游戏程序,设置“nowDirection”即蛇的当前移动方向为全局变量,由setInterval方法定时获取蛇的移动方向,由document.onkeydown()捕捉当前按键(上、下、左、右)以修改nowDirection,这样就可以用方向按键控制蛇周期时间的定向移动.