快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-24
= 0; i <= name.length; i++) {" +     " output = name.charAt(i) + output" +     "}");    // 得到output变量的值    String name = (String)engine.get("output");    out.printf("被翻转后的字符串:%s", name);   }   catch (ScriptException e)   {    err.println(e);   }  } }

以上代码的输出结果为:被翻转后的字符串:gfedcba

让脚本运行得更快

众所周知,解释运行方式是最慢的运行方式。上述的几个例子无一例外地都是以解释方式运行的。由于Java EE 6的脚本引擎可以支持任何实现脚本引擎接口的语言。有很多这样的语言提供了编译功能,也就是说,在运行脚本之前要先将这些脚本进行编译(这里的编译一般将不是生成可执行文件,而只是在内存中编译成更容易运行的方式),然后再执行。如果某段脚本要运行之交多次的话,使用这种方式是非常快的。我们可以使用ScriptEngine的compile方法进行编译。并不是所有脚本引擎都支持编译,只有实现了Compilable接口的脚本引擎才可以使用compile进行编译,否则将抛出一个错误。下面的例子将演示如何使用compile方法编译并运行javascript脚本。

import javax.script.*; import java.io.*; import static java.lang.System.*; public class CompileScript {  public static void main(String args[])  {   ScriptEngineManager manager = new ScriptEngineManager();   ScriptEngine engine = manager.getEngineByName("javascript");   engine.put("counter", 0); // 向javascript传递一个参数   // 判断这个脚本引擎是否支持编译功能   if (engine instanceof Compilable)   {    Compilable compEngine = (Compilable)engine;    try    {     // 进行编译     CompiledScript script = compEngine.compile("function count() { " +      " counter = counter +1; " +      " return counter; " +     "}; count();");     out.printf("Counter: %s%n", script.eval());     out.printf("Counter: %s%n", script.eval());     out.printf("Counter: %s%n", script.eval());    }    catch (ScriptException e)    {     err.println(e);    }   }   else   {    err.println("这个脚本引擎不支持编译!");   }  } }

上面的代码运行后的显示信息如下:

Counter: 1.0

Counter: 2.0

Counter: 3.0

在这个例子中,先通过compile方法将脚本编译,然后通过eval方法多次进行调用。在这段代码中只有一个函数,因此,eval就返回了这个函数的值。

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

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

动态调用脚本语言的方法

上面的例子只有一个函数,可以通过eval进行调用并将它的值返回。但如果脚本中有多个函数或想通过用户的输入来决定调用哪个函数,这就需要使用invoke方法进行动态调用。和编译一样,脚本引擎必须实现Invocable接口才可以动态调用脚本语言中的方法。下面的例子将演示如何通过动态调用的方式来运行上面的翻转字符串的javascript脚本。

import javax.script.*; import java.io.*; import static java.lang.System.*; public class InvocableTest {  public static void main(String args[])  {   ScriptEngineManager manager = new ScriptEngineManager();   ScriptEngine engine = manager.getEngineByName("javascript");   if (eng

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号