您的位置:首页 > 编程语言 > Java开发

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:

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"));
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: