JAVA的嵌入式脚本开发(上)
2013-01-07 15:57
267 查看
Java是一种静态类型的编程语言。Java代码中的每个变量的类型都需要显示地进行声明,所以所有的变量、方法的参数以及返回值等在程序运行前,它们的类型都是已经确定的。这种静态类型特性使编译器可以在编译时执行大量的检查来发现代码中的明显类型错误,但也给Java不够简洁和灵活。
近年来,动态类型语言如JavaScript、Ruby、Python、Groovy的流行,也反应了语言中的动态性的重要。于是Java提供了脚本语言支持的API。使脚本语言可以在JVM上运行。我们主要来以JavaScript来玩玩脚本语言在Java中的使用。
本文将分以下几个小节来学习:
Java的JavaScript脚本引擎
脚本开发中涉及到的类和接口简介
开发步骤
脚本与java数据传递
脚本执行上下文
作用域
方法的调用
编译脚本
Java的JavaScript脚本引擎
Mozilla Rhino是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。Rhino(犀牛)这个名字来源于O'Reilly出版的著名的“犀牛书”JavaScript: The Definitive Guide(中文译名:JavaScript权威指南)。
Rhino 项目可以追溯到 1997 年,当时 Netscape 计划开发一个纯 Java 实现的 Navigator,为此需要一个 Java 实现的 JavaScript —— Javagator。它也就是 Rhino 的前身。起初 Rhino 将 JavaScript 编译成 Java 的二进制代码执行,这样它会有最好的性能。后来由于编译执行的方式存在垃圾收集的问题并且编译和装载过程的开销过大,不能满足一些项目的需求,Rhino 提供了解释执行的方式。随着 Rhino 开放源代码,越来越多的用户在自己的产品中使用了 Rhino,同时也有越来越多的开发者参与了 Rhino 的开发并做出了很大的贡献。如今 Rhino1.6R2 版本将被包含在 Java SE6 中发行,更多的 Java 开发者将从中获益。
脚本开发中涉及到的类和接口简介
在Java的嵌入式脚本开发中主要用的接口和类有ScriptEngineManager类、ScriptEngine接口、Bindings接口、ScriptContext接口。它们都位于javax.script包中。
ScriptEngineManager 类的对象将作为各种基本引擎的管理器,其实是一个工厂,应为ScriptEngine都是这个工厂来生产的。
ScriptEngine 接口的对象作为某种特定类型脚本的解释引擎,其中提供了一些用来执行脚本的方法。
Bindings 接口的对象用于脚本和Java传递数据;
ScriptContext 接口对象用户获取与脚本执行相关的信息;
开发步骤
创建ScriptEngineManager脚本引擎管理器/工厂对象;
生产引擎ScriptEngine接口对象;
ScriptEngine对象执行脚本;
Demo:
输出:
对上面代码的一点说明:
println是Rhino的输出函数,就如Java的System.out.Println;
ScriptEngineManager工厂管理器生产ScriptEngine有三种方式:
ScriptEngine的执行函数eval有很多重载,如果要加载外部js文件可以这样:se.eval(new FileReader("ex.js"));
近年来,动态类型语言如JavaScript、Ruby、Python、Groovy的流行,也反应了语言中的动态性的重要。于是Java提供了脚本语言支持的API。使脚本语言可以在JVM上运行。我们主要来以JavaScript来玩玩脚本语言在Java中的使用。
本文将分以下几个小节来学习:
Java的JavaScript脚本引擎
脚本开发中涉及到的类和接口简介
开发步骤
脚本与java数据传递
脚本执行上下文
作用域
方法的调用
编译脚本
Java的JavaScript脚本引擎
Mozilla Rhino是一个完全使用Java语言编写的开源JavaScript实现。Rhino通常用于在Java程序中,为最终用户提供脚本化能力。Rhino(犀牛)这个名字来源于O'Reilly出版的著名的“犀牛书”JavaScript: The Definitive Guide(中文译名:JavaScript权威指南)。
Rhino 项目可以追溯到 1997 年,当时 Netscape 计划开发一个纯 Java 实现的 Navigator,为此需要一个 Java 实现的 JavaScript —— Javagator。它也就是 Rhino 的前身。起初 Rhino 将 JavaScript 编译成 Java 的二进制代码执行,这样它会有最好的性能。后来由于编译执行的方式存在垃圾收集的问题并且编译和装载过程的开销过大,不能满足一些项目的需求,Rhino 提供了解释执行的方式。随着 Rhino 开放源代码,越来越多的用户在自己的产品中使用了 Rhino,同时也有越来越多的开发者参与了 Rhino 的开发并做出了很大的贡献。如今 Rhino1.6R2 版本将被包含在 Java SE6 中发行,更多的 Java 开发者将从中获益。
脚本开发中涉及到的类和接口简介
在Java的嵌入式脚本开发中主要用的接口和类有ScriptEngineManager类、ScriptEngine接口、Bindings接口、ScriptContext接口。它们都位于javax.script包中。
ScriptEngineManager 类的对象将作为各种基本引擎的管理器,其实是一个工厂,应为ScriptEngine都是这个工厂来生产的。
ScriptEngine 接口的对象作为某种特定类型脚本的解释引擎,其中提供了一些用来执行脚本的方法。
Bindings 接口的对象用于脚本和Java传递数据;
ScriptContext 接口对象用户获取与脚本执行相关的信息;
开发步骤
创建ScriptEngineManager脚本引擎管理器/工厂对象;
生产引擎ScriptEngine接口对象;
ScriptEngine对象执行脚本;
Demo:
package net.oseye; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ScriptTest { public static void main(String[] args) throws ScriptException { ScriptEngineManager factory=new ScriptEngineManager(); ScriptEngine se=factory.getEngineByName("JavaScript"); se.eval("println('脚本引擎测试')"); } }
输出:
脚本引擎测试
对上面代码的一点说明:
println是Rhino的输出函数,就如Java的System.out.Println;
ScriptEngineManager工厂管理器生产ScriptEngine有三种方式:
//使用引擎名创建 ScriptEngine engine = factory.getEngineByName ("JavaScript"); //使用引擎扩展名创建 ScriptEngine engine = factory.getEngineByExtension ("js"); //使用引擎Mime类型创建 ScriptEngine engine = factory.getEngineByMimeType ("application/javascript");
ScriptEngine的执行函数eval有很多重载,如果要加载外部js文件可以这样:se.eval(new FileReader("ex.js"));
相关文章推荐
- JAVA的嵌入式脚本开发(下)
- JAVA的嵌入式脚本开发(中)
- Java版AVG游戏开发入门示例[3]——脚本引擎的制作及应用
- 嵌入式或者驱动底层开发为何不如java等上层开发工资高?
- javaweb开发脚本语言
- Java嵌入式开发之j2me--三
- VIM:简化的单语言项目脚本──对Java项目开发的支持
- JAVA开发5--使用bat脚本调用jar包
- 嵌入式软件开发培训笔记——java第六天(IO、网络编程、反射与JNI)
- Java能扮演嵌入式应用开发的主角吗?
- Java嵌入式开发之J2ME(一)
- Java嵌入式开发之j2me--五
- 使用embeded tomcat进行嵌入式javaee开发-启动tomcat
- Java嵌入式开发之J2ME(二)
- Waba -- 嵌入式Java程序开发的另类选择
- 嵌入式开发学习笔记 ( java - c/c++ :从入门到入门 )
- 浅谈java在嵌入式开发中的应用
- 【嵌入式开发】 嵌入式开发工具简介 (裸板调试示例 | 交叉工具链 | Makefile | 链接器脚本 | eclipse JLink 调试环境)
- Java嵌入式开发之J2ME(三)
- CrawlScript语言————一门用javascript语法在JAVA环境下,快捷开发网络爬虫的脚本语言