频 道 直 达 - 新闻 - 读书 - 培训 - 教程 - 前沿 - 组网 - 系统应用 - 安全 - 编程 - 存储 - 操作系统 - 数据库 - 服务器 - 专题 - 产品 - 案例库 - 技术圈 - 博客 - BBS
51CTO.COM_中国领先的IT技术网站
找资料:

Java SE 6之脚本引擎 让程序如虎添翼(1)

作者: 极地圣火 出处:天极网  (  ) 砖  (  ) 好  评论 ( ) 条  进入论坛
更新时间:2006-11-27 10:45
关 键 词:Java  SE  脚本引擎
阅读提示:现在Java SE 5已经发布,在明年Java SE 6也将发布。Java SE 6较Java SE5有了很大的改进,它的功能更强,而且是专为Vista所设计,这就意味着Java SE 6将是Vista上的最佳选择。而Java SE 6所提供的最众多的新功能必将成为它的最大卖点。

Java SE 6最引人注目的新功能之一就是内嵌了脚本支持。在默认情况下,Java SE 6只支持JavaScript,但这并不以为着Java SE 6只能支持JavaScript。在Java SE 6中提供了一些接口来定义一个脚本规范,也就是JSR223。通过实现这些接口,Java SE 6可以支持任意的脚本语言(如PHP或Ruby)。

运行第一个脚本程序

在使用Java SE 6运行脚本之前,必须要知道你的Java SE 6支持什么脚本语言。在javax.script包中有很多的类,但这些类中最主要的是ScriptEngineManager。可以通过这个类得到当前Java SE 6所支持的所有脚本。如下面例子将列出所有可以使用的脚本引擎工厂。

import javax.script.*;
import java.io.*;
import java.util.*;
import static java.lang.System.*;
public class ListScriptEngines
{
 public static void main(String args[])
 {
ScriptEngineManager manager = new ScriptEngineManager();
// 得到所有的脚本引擎工厂
List<ScriptEngineFactory> factories = manager.getEngineFactories();
// 这是Java SE 5 和Java SE 6的新For语句语法
for (ScriptEngineFactory factory: factories)
{
 // 打印脚本信息
 out.printf("Name: %s%n" +
"Version: %s%n" +
"Language name: %s%n" +
"Language version: %s%n" +
"Extensions: %s%n" +
"Mime types: %s%n" +
"Names: %s%n",
factory.getEngineName(),
factory.getEngineVersion(),
factory.getLanguageName(),
factory.getLanguageVersion(),
factory.getExtensions(),
factory.getMimeTypes(),
factory.getNames());
 // 得到当前的脚本引擎
 ScriptEngine engine = factory.getScriptEngine();
}
 }
}

上面的例子必须要在Java SE 6中编译。其中import static java.lang.System.*是新的语法,将System中的所有静态成员进行引用,以后就可以直接使用out、in或err了。

通过运行java ListScriptEngines,将显示如下信息

Name: Mozilla Rhino
Version: 1.6 release 2
Language name: ECMAScript
Language version: 1.6
Extensions: [js]
Mime types: [application/javascript, application/ecmascript, text/javascript,

text/ecmascript]
Names: [js, rhino, JavaScript, javascript, ECMAScript, ecmascript]

在最下面一行是脚本的别名,也就是使用它们中的任意一个都可以。得到一个具体的脚本引擎有3种方法。

◆根据扩展名得到脚本引擎

ScriptEngine engine = manager.getEngineByExtension("js");


◆getEngineByExtension的参数就是Extensions:[js]中[…]里的部分。
◆根据Mime类型得到脚本引擎

ScriptEngine engine = manager.getEngineByMimeType("text/javascript");

getEngineByMimeType的参数可以是Mime types: [application/javascript,application/ecmascript,text/javascript, text/ecmascript]中的任何一个,可以将text/javascript改成text/ecmascript。

◆根据名称得到脚本引擎

ScriptEngine engine = manager.getEngineByName("javascript");

getEngineByName后的参数可以是Names: [js, rhino, JavaScript, javascript, ECMAScript,ecmascript]中的任何一个,如可以将javascript改成ecmascript。

上面已经讨论了执行脚本的第一步,就是得到一个可用的脚本引擎。在完成这项工作之 后就可以利用这个脚本引擎执行相应的脚本了。我们可以使用ScriptEngine的eval方法来执行脚本。eval方法被重载的多次,但最常用的是public Object eval(String script)。

下面的例子演示了如何使用eval方法来执行javascript脚本。

import javax.script.*;
import java.io.*;
import static java.lang.System.*;
public class FirstJavaScript
{
 public static void main(String args[])
 {
ScriptEngineManager manager = new ScriptEngineManager();
// 得到javascript脚本引擎
ScriptEngine engine = manager.getEngineByName("javascript");
try
{
 // 开始运行脚本,并返回当前的小时
 Double hour = (Double)engine.eval("var date = new Date();" +"date.getHours();");
 String msg;
 // 将小时转换为问候信息
 if (hour < 10)
 {
msg = "上午好";
 }
 else if (hour < 16)
 {
msg = "下午好";
 }
 else if (hour < 20)
 {
msg = "晚上好";
 }
 else
 {
msg = "晚安";
 }
 out.printf("小时 %s: %s%n", hour, msg);
}
catch (ScriptException e)
{
 err.println(e);
}
 }
}

上面的例子通过得到当前的小时,并将其转化为问候语。上面的程序的输出信息为:

小时9.0:上午好

这个例子最值得注意的是执行的2句脚本,最后一句是date.getHours()。并未将这个值赋给一个javascript变量。这时,eval方法就将这样的值返回。这有些类似C语言的(…)运算符。如(c=a+b, c + d),这个表达式的返回值是a+b+d。


共3页: 1 [2] [3] 下一页
【内容导航】
发表
查看
我也说两句

匿名发表

(如果看不清请点击图片进行更换)


中 国 领 先 的 IT 技 术 网 站 ·
技 术 成 就 梦 想
·Java基础教程 (查看52371次)
·UML类图详解 (查看46839次)
·Java编程开发手册 (查看25118次)
·UML统一建模语言 (查看24099次)
·C#技术开发指南 (查看22406次)
·Java编程开发手册 (1195个砖)
·Java基础教程 (429个砖)
·C#技术开发指南 (304个砖)
·PB开发教程 (220个砖)
·.NET开发手册 (217个砖)
·Java编程开发手册 (653个好)
·Java基础教程 (569个好)
·.NET开发手册 (251个好)
·PB开发教程 (209个好)
·Delphi开发技术手册 (174个好)
订阅技术快讯
电子杂志下载
名称:网络安全精品应用黄皮书
简介:《2007精品网络安全黄皮书》包括了9个大类24个小类, 800余篇文章,内容包含了熊猫烧香病毒、DDOS攻击、ARP病等热点问题的介绍及解决方案。从病毒查杀、防范、系统、数据等各方面的安全设置到黑客技术的了解、防范,涉及到了安全应用的全部领域, 由浅至深内容全面。
名称:Vista精品应用黄皮书
简介:《Vista精品应用黄皮书》囊括了Vista的各方面内容。此次的精简版,是将里面的内容做了提取,便于用户下载和使用。内容包含了各种Vista的安装与实施、技巧与解析以及各种Vista相关学习文档和相关软件的安全下载。该电子书是了解和应用Vista人员必备的工具手册,并且也是第一本
名称:2006中国IT论坛精品集合
简介:本书由“51CTO论坛推广联盟”制作完成。书中所有内容均来自各联盟成员的论坛(网站)。制作本书的目的是为了集中大家的优势资源,将更多更精彩的内容带给广大技术爱好者。本书是联盟成立以来制作的第一本书。
关键字阅读
频道精选
主编信箱 热线:010-66476606 告诉我们您想看的:专题 文章
关于我们 | 诚聘英才 | 联系我们 | 网站大事 | 意见反馈 | 网站地图
Copyright©2005-2007 51CTO.COM 版权所有