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

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

直接写代码,效果如下:

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

js>a.name

zhangwen

js>a.age30

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

functiontest(str){var name=str;print(name);

}

然后在console中输入:

js> load('test.js');

js> test('awen');

awen

js>

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

二 Rhino中调用JAVA

不说废话,直接上代码:

js> var date=newjava.util.Date();

js>date

Mon Jul16 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=newjava.lang.Runnable(obj);

js> var t=newjava.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

importorg.mozilla.javascript.Context;importorg.mozilla.javascript.Scriptable;public static voidmain(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);

}

java rhino 运行 js_Rhino -- 基于java的javascript实现相关推荐

  1. java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台

     详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于Java语言开发的奶茶外卖平台_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘   ...

  2. java rhino 运行 js_使用Rhino在Java中调用Javascript脚本

    转自:http://www.iteye.com/topic/87423 前段时间,在浏览javaeye论坛,看见有人征集如何在java中运行数学表达式. 结果方案五花八门: 1.jakarta com ...

  3. java平台设计zhe_基于java平台的网上评教系统的设计与实现

    基于java平台的网上评教系统的设计与实现 作者: 郭文占 摘要: 教师评价是高校教育管理的重要方面,也是促进教育发展和教师发展的重要手段.网上评教极大地减少了教务管理人员的工作量,正在被越来越多的高 ...

  4. java throw与throws_基于Java中throw和throws的区别(详解)

    系统自动抛出的异常 所有系统定义的编译和运行异常都可以由系统自动抛出,称为标准异常,并且 Java 强烈地要求应用程序进行完整的异常处理,给用户友好的提示,或者修正后使程序继续执行. 语句抛出的异常 ...

  5. java 返回js_如何基于java或js获取URL返回状态码

    这篇文章主要介绍了如何基于java或js获取URL返回状态码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参fgLAeaGAH考下 描述:使用java或者 ...

  6. java中介系统平台_基于JAVA的房屋中介管理系统的设计与实现.ppt

    基于JAVA的房屋中介管理系统的设计与实现 校友录管理系统 的设计与实现 院系: 华科学院经济与管理系 班级 :电子商务102202H 姓名 :王 爽 学号: 201022120225 指导教师 :王 ...

  7. java语言简介论文,基于Java的Web论坛开发.doc

    摘要:在科学技术快速发展的大环境下,移动互联网愈来愈普及,网络逐渐在生活中扮演着不可缺失的角色,人们大部分的交流或者工作都通过互联网来实现,而网上论坛更是成为了大众交流的一个平台,使得信息及时得以传播 ...

  8. java智能家居_基于JAVA的智能家居控制系统的设计(毕业设计).doc

    基于JAVA的智能家居控制系统的设计(毕业设计) 基于JAVA的智能家居系统的设计--信息控制子系统 PAGE 4 目 录 TOC \o "1-3" \h \z \u HYPERL ...

  9. java节假日算法_基于Java代码实现判断春节、端午节、中秋节等法定节假日的方法...

    一.前言 最近工作上遇到一个问题,后端有一个定时任务,需要用JAVA每天判断法定节假日.周末放假,上班等情况,其实想单独通过逻辑什么的去判断中国法定节假日的放假情况,基本不可能,因为国家每一年的假期可 ...

最新文章

  1. 用MATLAB画桌子,怎样用matlab编写桌子的动态变化图
  2. 用flex进行网易云音乐界面构建和布局解析(2)
  3. 数学与当代生命科学(吴家睿)
  4. qq分享 设备未授权报错解决方案_金融行业思科设备典型网络故障案例:76系列典型案例(四)...
  5. sqlite 日期格式与排序问题
  6. avalon框架,简单的MVVM
  7. leetcode445. 两数相加 II
  8. 二 jQuery 语法
  9. 【算法篇】八种内排序算法
  10. Codeforces Round #313 (Div. 1) A. Gerald's Hexagon 数学题
  11. 【网络流24题】 No.3 最小路径覆盖问题 (网络流|匈牙利算法 -最大二分匹配)...
  12. JavaSE复习(二)集合
  13. 电商价格战 谁才是最大受益者
  14. [转摘] 我的同学聚会--性格决定命运
  15. android双击返回键退出程序
  16. VBS进行http请求及JSON数据的读取和生成
  17. setuna截图软件怎么用_苹果手机笔记怎么做?用哪款笔记软件好
  18. 初学者上手python建模
  19. 微信扫码跳转浏览器下载app
  20. 该设备正在使用中,请关闭可能使用该设备的所有程序或窗口,然后重试

热门文章

  1. PHP 处理多重数组
  2. 你可能学了假流程图,三步教会你绘制大厂流程图(第一篇)
  3. 超实用web前端开发工具推荐(web开发+前端性能优化+浏览器兼容性测试+……)
  4. 基于树莓派(ARM)的人脸识别摄像头(QT5.8+OPENCV3.4.5)开发总结
  5. 安装苹果mac系统,提示没有符合安装资格的软件包
  6. 基于BS架构的研究生奖助学金评审系统
  7. DIY可视化导出uni-app源码生成器
  8. airtest-poco获取元素属性值attr
  9. x64dbg和IDA pro 配置PDB 符号文件symbols
  10. FMEA-MSR步骤六:优化