设为首页收藏本站language 语言切换
查看: 2249|回复: 0
收起左侧

Java基础:javascript嵌入到java程序中

[复制链接]
发表于 2010-2-20 13:59:39 | 显示全部楼层 |阅读模式
<p >随着java6.0的出现,向java嵌入javascript脚本变的特别容易。java6引入了一个新的javax.script包,为脚本化语言提供了一个通用接口。 <p ><p ><b>java中嵌入javascript脚本的思路:</b><p ><p >1.取得脚本解释器的管理器Manager <p >2.从管理器中取得js的解释器实例ScriptEngine <p >3.取得存储javascript变量的Bindings实例<p >4.把一个java.io.Reader流及Bindings传递给ScriptEngine的eval()方法,从而运行存储在外部文件中的脚本。eval()方法返回脚本运行结果,如果执行中发生错误,会抛出ScriptException异常。 <p ><p ><b>例:运行javascript脚本的一个java程序</b><p ><p ><ccid_nobr><table width="400" border="1" cellspacing="0" cellpadding="2"  bordercolorlight = "black" bordercolordark = "#FFFFFF" align="center"><tr><td bgcolor="e6e6e6" class="code" ><pre><ccid_code>import java.io.*;   import javax.script.Bindings;   import javax.script.ScriptEngine;   import javax.script.ScriptEngineManager;   import javax.script.ScriptException;    /** *//**author by http://www.bt285.cn/content.php?id=1196863 */public class RunScript {       public static void main(String[] args) throws IOException{           ScriptEngineManager scriptManager = new ScriptEngineManager();            //得到解释器的管理器,里面有很多种脚本解释器           ScriptEngine js = scriptManager.getEngineByExtension        (&quot;http://www.bt285.cn/aidesefang/ js&quot;);             //从管理器中获取js的解释器            //定义我们要运行的脚本文件           String filename = null;           //通过解释器来获得存储javascript变量的Bindings的实例,使它们提供给脚本。           Bindings bindings = js.createBindings();           //处理参数,参数是定义的脚本的变量。参数可能包括-Dname/value对。         我们要进行处理,任何参数不能以‘-D’为文件名开始           for(int i = 0;i&lt;args.length;i++){               String arg = args;               if(arg.startsWith(&quot;-D&quot;)){//如果参数是以“-D”开头,则进行处理                   int pos = arg.indexOf('=');                   if(pos == -1) usage();                   String name=arg.substring(2,pos);                   String value= arg.substring(pos+1);                   //注意:我们定义的所有的变量是字符串,                  如果必要的话,我们可以通过java.lang.Number ,一个java.lang.Boolean,                  任何Java对象或NULL,将脚本转换为其他类型。                   bindings.put(name, value);//脚本中的变量存入bindings实例中               }else{                   if(filename!=null)usage();                   filename=arg;               }           }           //这里是为了确保我们得到了一个文件的参数。           if(filename==null){               usage();           }           //增加一个具有约束力的使用特殊的保留变量名称,告诉脚本引擎的文件          的名称将执行。这使它能够提供更好的错误信息           bindings.put(ScriptEngine.FILENAME, filename);           //读取文件的流           Reader in = new FileReader(filename);           try{               //执行脚本并取得结果。注意in就相当于js中的脚本,              而bindings是脚本执行所需要的变量               Object result = js.eval(in,bindings);               System.out.println(result);           }catch(ScriptException ex){               //执行过程中出异常则显示一个错误信息               System.out.println(ex);           }       }       static void usage(){           System.err.println(&quot;Usage: java RunScript[-Dname=value] script.js&quot;);           System.exit(1);//异常退出程序。如果正常退出程序用System.exit(0);       }   }</ccid_code></pre></td></tr></table></ccid_nobr><br><p ><p >这段代码中所创建的Bindings对象不是静态的,JavaScript脚本所创建的所有的变量都存储在这里。下面是一个脚本化Java的更加实用的例子。它将它的Bindings对象存储在一个具有较高的作用域的ScriptContext对象中,以便可以读取其变量,但是新的变量就不存储到Binhdings对象中。这个例子实现了一个简单的配置文件工具,即一个文本文件,用来定义名字/值对,可以通过这里定义的Configuration类来查询它们。值可能是字符串、数字或布尔值,并且,如果一个值包含在花括号中,那么它就会传递给一个JavaScript解释器去计算。                                 <p align="center"><font color="FF0000" >1</font>2<span class="content01">下一页&gt;&gt;</span></p></p>
您需要登录后才可以回帖 登录 | 论坛注册

本版积分规则

QQ|Archiver|手机版|小黑屋|sitemap|鸿鹄论坛 ( 京ICP备14027439号 )  

GMT+8, 2025-4-7 18:00 , Processed in 0.057662 second(s), 23 queries , Redis On.  

  Powered by Discuz!

  © 2001-2025 HH010.COM

快速回复 返回顶部 返回列表