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 rhino js类_让Rhino JS看Java类

    我正在玩 Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码. 例如,这工作正常: print(new java.util.Date()); 但是使用NanoHTT ...

  2. java项目----教务管理系统_基于Java的教务管理系统

    java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...

  3. java订单类_基于Java创建一个订单类代码实例

    这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...

  4. java path类_基于java Files类和Paths类的用法(详解)

    Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...

  5. Java实现宿舍管理系统、基于java、JDBC、GUI(含源文件/综合项目)

    1 绪论 1.1 项目概述 本项目是一个小型宿舍管理系统.首先由超管增加.删除.修改.查找.导入超管和宿管信息,再由宿管界面登录负责增加.删除.修改.查找.学生的相关缺寝信息.学生通过注册将信息加到数 ...

  6. java 计算移动平均线_基于Java语言开发的个性化股票分析技术:移动平均线(MA)...

    基于Java语言开发的个性化股票分析技术:移动平均线(MA) 基于 Java 语言开发的个性化股票分析技术:移动平均线(MA)移动平均线(MA)是以道·琼斯的"平均成本概念"为理论 ...

  7. java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...

    先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...

  8. spring java配置_Spring:使基于Java的配置更加优雅

    spring java配置 大家好,我很久没有写新文章了. 积累了很多资料,需要在不久的将来在我的博客中发布. 但是现在我想谈谈Spring MVC应用程序配置. 确切地说,我想谈谈基于Java的Sp ...

  9. java制作五子棋的论文,基于java的五子棋的设计与实现.docx

    摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识.根据计算机的发展过程我们发现如今计算机应用的现 ...

  10. java线程卡住排查_基于 Java 线程栈 排查问题

    除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题? 方法当然是有的,就是通过现场快照定位并发现问题.我们所说的现场,主要指这两方面: Java 线程栈.线程栈是Jav ...

最新文章

  1. JS事件委托或者事件代理原理以及实现
  2. Dynamic Setting ImageUrl In DataPager
  3. 未来农业科技:物联网如何阻止全球粮荒
  4. Shiro 核心功能案例讲解 基于SpringBoot 有源码
  5. office 2013 安装问题
  6. eclipse format的时候如何让@param后不换行
  7. 每一个div元素分析 php,PHP初入,div知识点整理(特效字体等元素的使用整理)...
  8. 20145308刘昊阳 《Java程序设计》实验五报告
  9. LeetCode--palindrome-number回文数
  10. Linux环境Kafka安装配置
  11. 汇编取值运算符OFFSET,SEG,LEA和属性运算符PTR
  12. 分布式中使用redis进行session共享
  13. CSDN博客下载器的使用教程
  14. 关于西门子STEP7 在Windows10安装的一些心得
  15. 追剪算法C语言,基于PLC的追剪控制系统设计.doc
  16. pdf如何解除限制转换为word
  17. m6000查看端口状态_中兴ZXR10 M6000维护最常用命令精要
  18. 我的心酸求职之路:如果可以,去学Java、C,不要搞Python
  19. STM32F03学习笔记之ADC配置(含DMA配置)
  20. 绿之韵人民日报聚焦:加强企业管理,慢工才能出细活

热门文章

  1. 解决灵格斯强制更新问题
  2. 修改Maven本地仓库路径,IDEA修改maven位置
  3. 01 超级搜索术——信息搜索:全面、快速查找全网你想要的任何信息、情报
  4. word如何批量免费转PDF
  5. java面经2020
  6. 声艺fx16调音台怎么样_声艺调音台FX16II使用说明书.doc
  7. 海康播放视频Demo
  8. java读取txt文件_Java读取TXT文件的方法
  9. Sketch for Mac汉化破解教程含汉化包
  10. vue-json-editor高度调整