• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
西门吹雪
非我伤春春伤我,风一阵,雨一阵,好景不在哀残痕。 非我厌世世厌我,闲言来,碎语去,红颜憔悴心头冷。
博客园    首页    新随笔    联系   管理    订阅  订阅

JAVA服务器端来执行javascript脚本

在java下也有不少脚本引擎,像什么什么的——都没记住,不过最后还是选择了执行javascript脚本的引擎rhino,原因很简单,javascript脚本我会用,且据说rhino执行效率还行。不知道是不是不会玩perl或者python此类脚本的就是菜鸟,如果是的话,那我就是菜到不能再菜的鸟了。 言归正传,先给出rhino的下载地址:http://www.mozilla.org/rhino/download.html 下载后,把其中的js.jar加入到你的java工程中,执行以下代码: import org.mozilla.javascript.*; public class test { /** * @param args */ public static void main( String[] args) { // TODO Auto-generated method stub Context cx = Context.enter(); try { String s = "var c = 100 + 200"; Scriptable so = cx.initStandardObjects(); cx.evaluateString( so, s, "ex-1", 1, null); } finally { cx.exit(); } } } 如果没有意外的话,什么错误也不会报,什么输出也不会有。但是语句var c=100+200实实在在的被执行了。 先对执行脚本需要的类对象做一个说明,Context,脚本的运行时环境,Scriptable则是存放变量的地方。这两个类像是计算机的cpu和内存的作用。 在执行脚本前,必须要用Context.enter()进入一个运行时环境,在执行完成后,要用cx.exit()来退出运行环境。可以认为是要使用计算机,必须得先开电源,而用完后得关电源一样。 initStandardObjects()这个方法的作用是创建一个能被当前Context访问的内存Scriptable。 java.lang.Object evaluateString(Scriptable scope, java.lang.String source, java.lang.String sourceName, int lineno, java.lang.Object securityDomain) 这个方法则是在执行一段javascript脚本,scope就是先前创建的Scriptable;source,脚本代码;sourceName,脚本名称,不知道有什么用,可以随便给;lineno,开始执行的行号,一般都是1;securityDomain,和安全有关的东西,可以忽略。 我们把程序的evaluateString语句后增加一条语句System.out.println( so.get( "c", so)),执行后会发现输出的结果正是脚本预期的结果300。 对于像内存一样的Scriptabel来说,我们最常用的两个方法就是get还有put,既然能在脚本执行后从里面取出结果,自然也就能在执行前先用put事先往里面放值。具体俺就不写了。
posted @ 2008-02-15 16:22  西门吹雪  阅读(3637)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3