Mozilla Rhino 简介
来源:互联网 发布:阿里云数据盘重新挂载 编辑:程序博客网 时间:2024/05/22 04:51
Rhino 是一个纯 Java 的开源的 JavaScript 实现。他的名字来源于 O'Reilly 关于 JavaScript 的书的封面:
1. 简介
rhino是使用java代码实现的javascript解释器,它实现了javascript的核心,符合Ecma-262标准,支持javascript标准的所有特性。
Rhino 提供了如下功能
ü 对 JavaScript 1.5 的完全支持
ü 直接在 Java 中使用 JavaScript 的功能
ü 一个 JavaScript shell 用于运行 JavaScript 脚本
ü 一个 JavaScript 的编译器,用于将 JavaScript 编译成 Java 二进制文件
2. 如何运行js脚本
将js.jar放入classpath中,在cmd中键入java org.mozilla.javascript.tools.shell.Main后进入运行交互界面(js〉),而后在js〉提示符下输入 load( “文件路径”),注意次数的目录间隔是“/”。而后输入要运行的js的函数名称即可运行js脚本。
例:
js 代码
function isPrime (num)
{
if (num <= 1) {
print("Please enter a positive integer >= 2.")
return false
}
var prime = true
var sqrRoot = Math.round(Math.sqrt(num))
for (var n = 2; prime & n <= sqrRoot; ++n) {
prime = (num % n != 0)
}
return prime
}
java org.mozilla.javascript.tools.shell.Main
load("D:/isPrime.js");
isPrime(77);
结果=false
3. 脚本调试
在命令行输入java org.mozilla.javascript.tools.debugger.Main可以看到脚本调试页面
4. 如何通过java代码执行javascript
Rhino执行代码的过程
1) 先设置环境,生成各种javascript的本地对象,如:Object,Function
2) 使用语法分析对字符串进行分析生成ast。
3) 然后再使用IRFactory类将ast转换中间表示形式。
4) 然后再将该中间表示形式转换为二进制代码。
5) 然后执行该代码得出结果。
public static void main(String[] args) {
Context ctx = Context.enter(); //获取环境设置
Scriptable scope = ctx.initStandardObjects(); //初始化本地对象
scope.put("x", scope, new Integer(20)); //输入参数设置
scope.put("y", scope, new Integer(30));
try {
ctx.evaluateString(scope, "var result=x+y", "", 1, null); //执行
System.out.println(scope.get("result", scope)); //结果输出
} finally {
Context.exit();
}
5. Rhino的包结构
org.mozilla.javascript包:该包内的对象是实现javascript的主要对象。
org.mozilla.javascript.ast包:rhino中语法分析器生成的ast表示类都在该包内。
org.mozilla.javascript.debug包:该包实现了javascript的debug功能。
org.mozilla.javascript.optimizer包:该包实现了javascipt生成代码的代码优化。
org.mozilla.javascript.regexp包:该包实现了javascript正侧表达式的功能。
6.JSR233
Jsr233是为java设计的一套脚本语言API,在发行版本中包括了一个基于 Mozilla Rhino 的 JavaScript 脚本引擎。
例:
public class RunJavaScript {
public static void main(String[] args){
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName ("JavaScript");
engine.eval("print('Hello World')");
}
}
如何与java通信
通过put 方法用于将一个 Java 对象映射成一个脚本语言的变量
public class HelloWorld {
String s = "Hello World";
public void sayHello(){
System.out.println(s);
}
}
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class TestPut {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
HelloWorld hello = new HelloWorld();
engine.put("script_hello", hello);
engine.eval("script_hello.sayHello()");
}
}
7. Rhino与java的区别
ü 由于 Rhino 是采用动态类型的语言,因此在函数和变量的声明中看不到类型。您可以使用 function
关键字开始函数的声明,使用 var
关键字来声明局部变量;
ü Rhino 中语句结束符是可选的;
8. 如何使用java类库
Rhino 中定义了一个全局变量—— Packages,并且它的所有元素也是全局变量,这个全局变量维护了 Java 类的层次结构
var frame = java.io.File("filename");
也可以像 Java 代码中一样把这个对象引用进来
importClass (java.io.File);
var file = File("filename");
importPackage(java.io);
用户自定义的包也可以被引用进来,不过这时候 Packages 引用不能被省略
importPackage(Packages.tony);
var hello = HelloWorld();
hello.sayHello();
8.对javabean的支持
Rhino 对于 JavaBean 的 get 和 is 方法将会自动匹配,例如调用 hello.string,如果不存在 string 这个变量,Rhino 将会自动匹配这个实例的 isString 方法然后再去匹配 getString 方法,若这两个方法均不存在才会返回 undefined。
官方:
http://www.mozilla.org/rhino/
http://www.mozilla.org/rhino/ScriptingJava.html
- Mozilla Rhino 简介
- Rhino简介
- Rhino简介
- https://github.com/mozilla/rhino/tags
- Mozilla Rhino: implementation of JavaScript in Java
- JDK1.6对脚本语言的支持(Mozilla Rhino)
- Rhino
- Rhino
- 1. javascript 引擎Rhino源代码分析 简介
- Mozilla Rhino:使用java语言来解释和执行javascript脚本(转)
- Mozilla Rhino:使用java语言来解释和执行javascript脚本(转)
- Mozilla
- 初识Rhino
- android rhino
- Rhino学习
- Rhino| Rhino的测试例子
- Rhino| Rhino详细介绍与实战
- Rhino Mocks (RhinoMock)2
- MSDN -------API函数使用
- vb.net反射机制
- (转)关于git仓库的初始化和git push的操作
- c# 学习 实现多个接口
- 文件操作
- Mozilla Rhino 简介
- 为Ubuntu添加PATH环境变量
- AVL 树的插入与旋转
- android开发资料
- set_unexpected
- 生活随笔:大学需要确立自己的方向
- 一个灵巧的Delphi多播实事件现方案.
- 彻底搞定C指针-指向另一指针的指针
- Java对String字符串对象的创建,管理和“+”运算符的实现