Rhino -- 基于java的javascript实现
这几天突然对js引擎非常感兴趣,大概了解了一下,记下来备忘。javascript引擎大家比较熟悉的应该是当前比较火的Chrome V8引擎。以快速闻名。v8基于c++开发。这里就不多阐述了。另外一个是 基于java的Rhino引擎,这个想来大家不是很了解。下面来简单介绍一下。
http://tool.oschina.net/apidocs/apidoc?api=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); 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接口:
![复制代码](http://common.cnblogs.com/images/copycode.gif)
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(); running...
![复制代码](http://common.cnblogs.com/images/copycode.gif)
Rhino创建Java 数组
![复制代码](http://common.cnblogs.com/images/copycode.gif)
js var array=java.lang.reflect.Array.newInstance(java.lang.String, 2); js array[0]="恩"; js array[1]="哦"; js java.util.Arrays.toString(array); [恩, 哦]
![复制代码](http://common.cnblogs.com/images/copycode.gif)
![复制代码](http://common.cnblogs.com/images/copycode.gif)
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://common.cnblogs.com/images/copycode.gif)
Java实现图书管理系统 本篇文章是对目前Java专栏已有内容的一个总结练习,希望各位小主们在学习完面向对象的知识后,可以阅览本篇文章后,自己也动手实现一个这样的demo来加深总结应用已经学到知识并进行巩固。
Java实现拼图小游戏(1)—— JFrame的认识及界面搭建 如果要在某一个界面里面添加功能的话,都在一个类中,会显得代码难以阅读,而且修改起来也会很困难,所以我们将游戏主界面、登录界面、以及注册界面都单独编成一个类,每一个类都继承JFrame父类,并且在类中创建方法来来实现页面
Java实现拼图小游戏(7)—— 计步功能及菜单业务的实现 注意由于我们计步功能的步数要在重写方法中用到,所以不能将初始化语句写在方法体内,而是要写在成员位置。在其名字的时候也要做到“见名知意”,所以我们给它起名字为step
Java实现拼图小游戏(7)—— 作弊码和判断胜利 当我们好不容易把拼图复原了,但是一点提示也没有,完全看不出来是成功了,那么我们就需要有判断胜利的功能去弹出“成功”类的图片,以便于玩家选择是重新开始还是退出小游戏
相关文章
- javascript 基础_JavaScript高级编程
- java局域网发送文件_Java如何实现局域网文件传输代码案例分享
- 做了三年Java,java注释的三种形式
- java标识符与关键字_4、Java标识符和关键字
- java实现ajax_Ajax&Java
- java基本数据类型 think in java_Think in Java(一):Java基础[通俗易懂]
- java生成license_使用truelicense实现用于JAVA工程license机制(包括license生成和验证)…
- JAVA数据库连接池_java与数据库的连接怎么实现
- ringbuffer java例子_Java RingBuffer.publish方法代碼示例「建议收藏」
- java创建线程池的几种方式_Java中的线程池
- MySQL与Java的强强联合:开启智能数据库时代(mysql和java)
- 面试前准备:Java技术和Redis快速入门(java面试redis)
- 连接MySQL连接技术之Java实现(java的mysql)
- Java连接Oracle实现简单快捷的数据传输(java联结oracle)
- Java程序中使用Redis链接提升效率(redis 链接java)
- 缓存使用Redis让Java代码更加迅速缓存设置(redis设置java)
- 使用JavaScript实现Java的List功能(实例讲解)