<%@ page contentType="text/html; charset=gb2312"%> Java 6.0 操作脚本语言基础
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
Java 6.0 操作脚本语言基础
     发布者: 发布时间:2007-10-03
  Java6.0里面加了一个很实用的包:javax.script,它是Java新增的操作脚本的包,利用它我们可以对脚本语言进行操作,比如修改,或者调用,并且可以和Java语言交互,如果我们利用好的话,我们利用它来实现一些经常要改的部份,这样我们就可以把一些算法写到js文件里面,然后再在运行的时候读取出来并执行,这样就省去了更改一些东西需要重新编译的过程了.

  下面我们就来看一个例子吧,看看如何在Java代码里面操作脚本并调用里面的方法.

/*
* Test.java
*
* Created on 2007-9-19, 15:28:49
*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package lbf.script;

import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;
import javax.script.Bindings;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.swing.JFrame;

/**
*
* @author hadeslee
*/
public class Test {

 public static void main(String[] args)throws Exception {
  //根据js的后缀名生成一个解析JS的脚本解析引擎
  ScriptEngine engin=new ScriptEngineManager().getEngineByExtension("js");
  //查询一下这个引擎是否实现了下面很实用的接口
  System.out.println(engin instanceof Invocable);
  //声明两个对象,传入到JS里面去
  JFrame jf=new JFrame("test");
  List<String> list=new ArrayList<String>();
  //得到挷定的键值对象,把当前的两个JAVA对象放进去
  Bindings bind=engin.createBindings();
  bind.put("jf",jf);
  bind.put("list",list);
  //把挷下的键值对象放进去,作用域是当前引擎的范围
  engin.setBindings(bind, ScriptContext.ENGINE_SCOPE);
  //用引擎执行一段写在JS文件里面的代码
  Object obj=engin.eval(new FileReader("test.js"));
  //这个时候返回值当然 是null了
  System.out.println(obj);
  //把当前的引擎强制转为Invocable,这样就可以调用定义在JS文件里面的一个一个函数了
  Invocable in=(Invocable)engin;
  //得到了从JS里面返回来的对象
  List<String> l=(List<String>)in.invokeFunction("getNames");
  System.out.println(l);
  //调用一下定义在JS里面的另一个函数
  in.invokeFunction("testJS");
  //最后调用一个函数,该函数可以使我们前面定义的窗体显示出来
  in.invokeFunction("doSth");
 }
}

  下面是定义在test.js里面的内容

function doSth(){
 jf.setSize(500,300);
 jf.setVisible(true);
 jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);
}
function getNames(){
 list.add("doSth");
 list.add("getNames");
 return list;
}

function testJS(){
 print('Hello world!');
}

  我们可以看到,在JAVA运行了以后,窗体会显示出来,并且我们可以接收到从JS解析引擎里面传回的数据,当然我们也可以调用一个很普通的JS函数,想象一下,如果我们把我们程序运行时的一些对象都设到Bindings里面去,那么我们JS岂不是有很大的自由度了吗?因为JS里面也可以操作我们的Java对象了,并且我们可以像ava编程一样的对JS编程了,还不用再编译,马上就可以运行.灵活性岂不是变得更高了吗?

  过几天写一个利用Java解析JS提高编程灵活性的例子,以体现一下这个包的用处,不过,JS的缺点就是执行速度慢,比起Java代码那是慢多了,但是一些初始化的事情,或者一些设置的事情,我们就不用写死在程序里面了,就可以从我们定义的JS文件里面读取了,毕竟那些只执行一次的方法牺牲一点效率换来很高的灵活度是很值得的。

  查阅关于Java的全部文档
(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
RFT与Spring结合进行自动化脚本开发之一
彻底明白 Java 语言中的IO系统
为Java程序中添加播放MIDI音乐功能
Spring破冰之旅 始于足下
Spring中事件处理的小技巧
JavaBean中使用JDBC方式进行事务处理
 
最近评论:
        
鍥炲
        
那个雨天的想法!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(2558)
        
那天的情景!
Maple Story mesos,MapleStory mesos,ms mesos,mesos,SilkRoad Gold, max(6457)
        
轻轻走过你的窗前!
world of warcraft gold,cheap world of warcraft gold,warcraft gold,world of warcraft gold,cheap world of warcraft gold,warcraft gold max(6154)
        
快乐情人节!
wow gold,wow gold,wow gold,wow gold,wow gold,wow gold,wow gold buy wow gold for cheap. max(9917)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(8041)
        
没有情人的情人节!
wow gold,wow power leveling.wow power leveling,wow power leveling, max(9694)
        
不想在乎你!
dofus kamas,dofus kamas,EVE ISK,dog shoes,pet supply, max(6925)
        
我想告诉你!
final fantasy xi gil,final fantasy xi gil,final fantasy xi gil,world of warcraft gold,cheap world of warcraft gold max(9774)
        
我想告诉你!
ffxi gil,ffxi gil,ffxi gil,final fantasy xi gil, max(8772)
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号