java rhino js类_Rhino -- 基于java的javascript实现
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实现相关推荐
- java rhino js类_让Rhino JS看Java类
我正在玩 Rhino,我已经成功使用了stdlib中的Java类,但没有使用我编译的Java代码. 例如,这工作正常: print(new java.util.Date()); 但是使用NanoHTT ...
- java项目----教务管理系统_基于Java的教务管理系统
java项目----教务管理系统_基于Java的教务管理系统 2022-04-22 18:18·java基础 最近为客户开发了一套学校用教务管理系统,主要实现学生.课程.老师.选课等相关的信息化管理功 ...
- java订单类_基于Java创建一个订单类代码实例
这篇文章主要介绍了基于Java创建一个订单类代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 需求描述 定义一个类,描述订单信息 订单id 订 ...
- java path类_基于java Files类和Paths类的用法(详解)
Java7中文件IO发生了很大的变化,专门引入了很多新的类: import java.nio.file.DirectoryStream; import java.nio.file.FileSystem ...
- Java实现宿舍管理系统、基于java、JDBC、GUI(含源文件/综合项目)
1 绪论 1.1 项目概述 本项目是一个小型宿舍管理系统.首先由超管增加.删除.修改.查找.导入超管和宿管信息,再由宿管界面登录负责增加.删除.修改.查找.学生的相关缺寝信息.学生通过注册将信息加到数 ...
- java 计算移动平均线_基于Java语言开发的个性化股票分析技术:移动平均线(MA)...
基于Java语言开发的个性化股票分析技术:移动平均线(MA) 基于 Java 语言开发的个性化股票分析技术:移动平均线(MA)移动平均线(MA)是以道·琼斯的"平均成本概念"为理论 ...
- java 静态对象赋值_基于Java class对象说明、Java 静态变量声明和赋值说明(详解)...
先看下JDK中的说明: java.lang.Object java.lang.Class Instances of the class Class represent classes and inte ...
- spring java配置_Spring:使基于Java的配置更加优雅
spring java配置 大家好,我很久没有写新文章了. 积累了很多资料,需要在不久的将来在我的博客中发布. 但是现在我想谈谈Spring MVC应用程序配置. 确切地说,我想谈谈基于Java的Sp ...
- java制作五子棋的论文,基于java的五子棋的设计与实现.docx
摘要:随着社会的不断发展,我们的科技也不断的进步,现在我们的计算机也与我们的生活息息相关,这个时候 Internet能够让我们快速的知道自己想了解的知识.根据计算机的发展过程我们发现如今计算机应用的现 ...
- java线程卡住排查_基于 Java 线程栈 排查问题
除日志外,还有没有别的方式跟踪线上服务问题呢?或者,跟踪并排除日志里无法发现的问题? 方法当然是有的,就是通过现场快照定位并发现问题.我们所说的现场,主要指这两方面: Java 线程栈.线程栈是Jav ...
最新文章
- JS事件委托或者事件代理原理以及实现
- Dynamic Setting ImageUrl In DataPager
- 未来农业科技:物联网如何阻止全球粮荒
- Shiro 核心功能案例讲解 基于SpringBoot 有源码
- office 2013 安装问题
- eclipse format的时候如何让@param后不换行
- 每一个div元素分析 php,PHP初入,div知识点整理(特效字体等元素的使用整理)...
- 20145308刘昊阳 《Java程序设计》实验五报告
- LeetCode--palindrome-number回文数
- Linux环境Kafka安装配置
- 汇编取值运算符OFFSET,SEG,LEA和属性运算符PTR
- 分布式中使用redis进行session共享
- CSDN博客下载器的使用教程
- 关于西门子STEP7 在Windows10安装的一些心得
- 追剪算法C语言,基于PLC的追剪控制系统设计.doc
- pdf如何解除限制转换为word
- m6000查看端口状态_中兴ZXR10 M6000维护最常用命令精要
- 我的心酸求职之路:如果可以,去学Java、C,不要搞Python
- STM32F03学习笔记之ADC配置(含DMA配置)
- 绿之韵人民日报聚焦:加强企业管理,慢工才能出细活