快速业务通道

Java SE 6之脚本引擎 让程序如虎添翼 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
ipt");

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

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

时间:2010-04-27 天极 极地圣火

上面已经讨论了执行脚本的第一步,就是得到一个可用的脚本引擎。在完成这项工作之 后就可以利用这个脚本引擎执行相应的脚本了。我们可以使用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。

和脚本语言进行交互

上面例子只是运行了一个非常简单的脚本。这个脚本是孤立的,并未通过Java向这脚本传递任何的值。虽然从这个脚本返回了一个值,但这种返回方式是隐式的。

脚本引擎除了这些简单的功能,还为我们提供了更强大的功能。甚至可以通过Java向脚本语言中传递参数,还可以将脚本语言中的变量的值取出来。这些功能要依靠ScriptEngine中的两个方法put和get。

put 有两个参数,一个是脚本变量名,另一个是变量的值,这个值是Object类型,因此,可以传递任何值。

get 有一个参数,就是脚本变量的名。

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

时间:2010-04-27 天极 极地圣火

下面的代码通过javascript脚本将一个字符串翻转(这个字符串是通过java传给javascript的),然后通过java得到这个被翻转后的字符后,然后输出。

import javax.script.*; import java.io.*; import static java.lang.System.*; public class ReverseString {  public static void main(String args[])  {   ScriptEngineManager manager = new ScriptEngineManager();   // 建立javascript脚本引擎   ScriptEngine engine = manager.getEngineByName("javascript");   try   {    // 将变量name和变量值abcdefg传给javascript脚本    engine.put("name", "abcdefg");    // 开始执行脚本    engine.eval("var output = '''';" +     "for (i

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号