分类:
2008-10-15 16:36:47
2006 年底,Sun 公司发布了 Standard Edition 6( SE 6)的最终正式版,代号 Mustang(野马)。跟 Tiger(Java SE 5)相比,Mustang 在性能方面有了不错的提升。与 Tiger 在 API 库方面的大幅度加强相比,虽然 Mustang 在 API 库方面的新特性显得不太多,但是也提供了许多实用和方便的功能:在脚本,WebService,XML,编译器 API,数据库,JMX,网络 和 Instrumentation 方面都有不错的新特性和功能加强。
本系列 文章主要介绍 Java SE 6 在 API 库方面的部分新特性,通过一些例子和讲解,帮助开发者在编程实践当中更好的运用 Java SE 6,提高开发效率。本文是系列文章的第 6 篇,介绍了 Java SE 6 在脚本编程方面的新特性。
Java 脚本 API 概述
Java SE 6 引入了对 Java Specification Request(JSR)223 的支持,JSR 223 旨在定义一个统一的规范,使得 Java 应用程序可以通过一套固定的接口与各种脚本引擎交互,从而达到在 Java 平台上调用各种脚本语言的目的。javax.script 包定义了这些接口,即 Java 脚本编程 API。Java 脚本 API 的目标与 Apache 项目 Bean Script Framework(BSF)类似,通过它 Java 应用程序就能通过虚拟机调用各种脚本,同时,脚本语言也能访问应用程序中的 Java 对象和方法。Java 脚本 API 是连通 Java 平台和脚本语言的桥梁。首先,通过它为数众多的现有 Java 库就能被各种脚本语言所利用,节省了开发成本缩短了开发周期;其次,可以把一些复杂异变的业务逻辑交给脚本语言处理,这又大大提高了开发效率。
在 javax.script 包中定义的实现类并不多,主要是一些接口和对应的抽象类,图 1 显示了其中包含的各个接口和类。
图 1. javax.script 包概况
这个包的具体实现类少的根本原因是这个包只是定义了一个编程接口的框架规范,至于对如何解析运行具体的脚本语言,还需要由第三方提供实现。虽然这些脚本引擎的实现各不相同,但是对于 Java 脚本 API 的使用者来说,这些具体的实现被很好的隔离隐藏了。Java 脚本 API 为开发者提供了如下功能:
在详细介绍这四个功能之前,我们先通过一个简单的例子来展示如何通过 Java 语言来运行脚本程序,这里仍然以经典的“Hello World”开始。
清单 1. Hello World
|
这个例子非常直观,只要通过 ScriptEngineManager 和 ScriptEngine 这两个类就可以完成最简单的调用。首先,ScriptEngineManager 实例创建一个 ScriptEngine 实例,然后返回的 ScriptEngine 实例解析 JavaScript 脚本,输出运行结果。运行这段程序,终端上会输出“Hello World“。在执行 eval 函数的过程中可能会有 ScriptEngine 异常抛出,引发这个异常被抛出的原因一般是由脚本输入语法有误造成的。在对整个 API 有了大致的概念之后,我们就可以开始介绍各个具体的功能了。
[1]