科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道Java SE 6之脚本引擎 让程序如虎添翼2

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

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

现在Java SE 5已经发布,在明年Java SE 6也将发布。Java SE 6较Java SE5有了很大的改进,它的功能更强,而且是专为Vista所设计,这就意味着Java SE 6将是Vista上的最佳选择。而Java SE 6所提供的最众多的新功能必将成为它的最大卖点。

作者:极地圣火 来源:IT专家网 2008年6月4日

关键字: 引擎 脚本 Java SE 6 java

  • 评论
  • 分享微博
  • 分享邮件
下面的例子演示了如何使用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 有一个参数,就是脚本变量的名。

  下面的代码通过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 = 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

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章