`
m635674608
  • 浏览: 4905704 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Rhino -- 基于java的javascript实现

 
阅读更多

这几天突然对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

分享到:
评论

相关推荐

    rhino-1.7.7.1.jar(Rhino for java)

    Rhino的jar包。 Rhino 是开源的 JavaScript 引擎,是完全基于 Java 实现,几乎可以使用 JavaScript 完成 Java 所有的工作。

    rhino-1.7.7.1.jar 及源码

    Rhino 是开源的 JavaScript 引擎,是完全基于 Java 实现,几乎可以使用 JavaScript 完成 Java 所有的工作。 官网网址:https://developer.mozilla.org/zh-CN/docs/Mozilla/Projects/Rhino/Download_Rhino

    rhinoforandroid-rhino-r6.1.1-sl4a-r6.2.0-.rar

    Rhino的apk包。 Rhino 是开源的 JavaScript 引擎,是完全基于 Java 实现,几乎可以使用 JavaScript 完成 Java 所有的工作,在安卓上运行,还有一个SL4A.APK包,版本都标在上面了

    rhino-1.7.7.1

    Rhino 是一种使用 Java 语言编写的 JavaScript 的开源实现,原先由Mozilla开发,现在被集成进入JDK 6.0。与其他很多语言一样,Rhino 是一种动态类型的、基于对象的脚本语言,它可以简单地访问各种 Java 类库。Rhino ...

    使用Rhino让java执行javascript的方法实例

    主要介绍了java使用Rhino执行javascript的方法,Rhino由Mozilla开发,是 JavaScript 一种基于Java的实现

    rhino 17_3

    rhino javascript 容器 Rhino是开源的JavaScript引擎是完全基于Java实现,几乎可以使用JavaScript完成Java所有的工作

    tyrus-sample-draw-1.2.1.zip

    rhino-maven-plugin.zip,基于mozilla rhino maven将javascript编译为java的maven构建插件基于mozilla rhino的maven构建插件

    基于Java和Python的爬虫项目实战源码.zip

    基于Java和Python的爬虫项目实战源码.zip 自己动手写网络爬虫》,并基于Python3和Java实现 为什么采用宽度优先搜索策略? 深度优先遍历可能会在深度上过“深”而陷入“黑洞”; 重要的网页往往距离种子网页比较近,...

    jasmine-env.js-Rhino:将Jasmine用作Web应用程序的测试框架。 使用Env.js + Rhino设定Jasmine for CI,例如Hudson

    介绍该演示应用程序展示了... Rhino 是完全用Java编写JavaScript的开源实现。 它通常嵌入到Java应用程序中,以向最终用户提供脚本。 该项目展示了如何在诸如Hudson的连续集成环境中使用Rhino来运行Jasmine规范。运行测

    使用 Rhino 存储文件方法

    基于 Java 的 JavaScript 解释器 Rhino 博文链接:https://kindy.iteye.com/blog/150892

    gino:用于基于 mozilla-rhino 的 javascript 开发的 gradle 插件

    吉诺 用于 javascript 程序的基于 gradle 的运行器。 极大地简化了在 java 或 groovy 应用程序上下文中启动 javascript 程序。 更多信息即将推出!

    mirai-rhinojs-sdk:为Mirai API Http提供封装好的适用于Mozilla Rhino的SDK,适配Auto.js

    安卓用户可以在Termux配置java环境或下载基于rhino的应用(如Auto.js) 如何简单易用? 下面提供一个简单的例子: //将消息类型等静态常量注册进全局对象 Mirai.registerClasses2Object(this); //设置http api服务器...

    JavaScript权威指南(第6版)

    《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...

    基于GraalVM的ECMAScript 2020兼容Javascript实现。 具有多语种语言的互操作性支持。-C/C++开发

    GraalVM JavaScript的目标是:以最佳性能执行JavaScript代码与最新的ECMAScript规范完全兼容支持Node.js应用程序,包括本机软件包(选中)允许从基于Nashorn或Rhino的应用程序简单升级与Java,Scala或Java的快速互...

    JavaScript权威指南(第6版)(中文版)

    《JavaScript权威指南(第6版)》主要讲述的内容涵盖JavaScript语言本身,以及Web浏览器所实现的JavaScript API。本书第6版涵盖了HTML5和ECMAScript 5,很多章节完全重写,增加了当今Web开发的最佳实践的内容,新增...

    JavaScript权威指南(第6版)中文文字版

    12.1 用rhino脚本化java 291 12.2 用node实现异步i/o 297 第二部分 客户端javascript 第13章 web浏览器中的javascript 309 13.1 客户端javascript 309 13.2 在html里嵌入javascript 313 13.3 javascript程序的执行 ...

    JavaScript权威指南(第六版) 清晰-完整

    12.1 用Rhino脚本化Java 12.2 用Node实现异步I/O 第二部分 客户端JavaScript 第13章 Web浏览器中的JavaScript 13.1 客户端JavaScript 13.2 在HTML里嵌入JavaScript 13.3 JavaScript程序的执行 13.4 兼容性和互用性 ...

Global site tag (gtag.js) - Google Analytics