`
lbfhappy
  • 浏览: 81672 次
社区版块
存档分类
最新评论

JAVA6.0操作脚本语言

阅读更多
JDK6.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对象了,并且我们可以像JAVA编程一样的对JS编程了,还不用再编译,马上就可以运行.灵活性岂不是变得更高了吗?

过几天写一个利用JAVA解析JS提高编程灵活性的例子,以体现一下这个包的用处,不过,JS的缺点就是执行速度慢,比起JAVA代码那是慢多了,但是一些初始化的事情,或者一些设置的事情,我们就不用写死在程序里面了,就可以从我们定义的JS文件里面读取了,毕竟那些只执行一次的方法牺牲一点效率换来很高的灵活度是很值得的.
分享到:
评论
1 楼 liang1022 2010-06-18  
Groovy 腳本語言在功能上可以取代javax.script 嗎?

相关推荐

    免费下载:自己整理的java学习资料

    自己整理的一些资料,不需要积分,希望对大家有帮助。...JAVA6.0API_CN.CHM Java常见问题.pdf Java数据结构和算法中文第二版.pdf Java网络高级编程.pdf jsp高级运用 spring2中文开发参考手册.chm a.txt

    Lucee,lucee服务器是一种动态的、基于java的(jsr-223)标记和脚本语言,用于快速web应用程序开发。lucee简化了webservices(rest、soap、http)、orm(hibernate)、搜索(lucene)、数据源(mssql、oracle、mysql等)、缓存(infinispan、ehcache和memcached)等技术。lucee为adobe coldfusion©cfml提供了一个兼容层,它使用更少的资源并提供更好的性能。.zip

    lucee服务器(简称lucee)是一种动态的、基于java的标记和脚本语言,用于快速的web应用程序开发。

    IIS6.0 IIS,互联网信息服务

     一、IIS的添加 请进入“控制面板”,依次选“添加/删除程序→添加/删除Windows组件”,将“Internet信息服务(IIS)”前的小钩去掉(如有),重新勾选中后按提示操作即可完成IIS组件的添加。用这种方法添加的IIS...

    网鸽邮件系统 v6.0.zip

    网鸽邮件系统是一套快速、稳定、...· 邮件服务器和WEBMAIL均采用C语言编写(完全摈弃ASP、JAVA等脚本语言),从而将系统的整体性能发挥到极至。 · 网鸽邮件系统经过长时间的锤炼和完善,目前的最新版本为FI3.12版。

    智能网站服务器多语言集成包AiWnmp v1.014 中秋特别版.zip

    ZendLoader6.0 [PHP脚本加速引擎] ZendDebugger6.2 [php开发调试组件] Sendmail [Smtp服务组件] Jre8.0 [JAVA解释浏览器] vc11 [Visual C 2012 运行库] 备注:提示安装插件的是VC11,为该版本必须的支持运行库

    毕业设计:ASP基于WEB购物系统(源代码)

    通过本系统的开发,构建一个购物网站,顾客可以很... 脚本语言:JavaScript、VBScript 数据库工具:Microsoft Access 2000 ASP开发工具:Microsoft Visual InterDev 6.0 网页设计:Macromedia DreamweaverMX

    paranamer:Paranamer-访问Java5、6、7、8中的参数名称

    迄今为止,参数名称访问对于Java应用程序开发人员并不是很有用,但是随着JVM的高级脚本语言和Web操作框架的出现,能够利用方法的参数名称变得越来越重要。 诸如和类的脚本语言,诸如和 (濒临透明)的Web动作框架...

    MF00600-JAVA企业信息管理平台框架源码.zip

    开发语言 : JAVA 数据库 : MySQL 开发工具 : Eclipse 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发环境:jdk6.0或者jdk7 eclipse-jee3.7.2 indigo 数据库 mysql5 ...

    rhino-1.7.7.1

    Rhino 是一种使用 Java 语言编写...与其他很多语言一样,Rhino 是一种动态类型的、基于对象的脚本语言,它可以简单地访问各种 Java 类库。Rhino 从 JavaScript 中借用了很多语法,让程序员可以快速编写功能强大的程序。

    Python-基础语法.pdf

    Python 基础语法 " 菜鸟教程 Python 基础语法 Python 语言与 Perl,C 和 Java 等语言有许多相似之处。但是,也存在一些差异。 在本章中我们将来学习 Python 的基础语法,让你快速学会 Python 编程。 第一个 Python ...

    ACWPS(爱博汉语分词系统)分词组件 asp分词组件

    爱博汉语分词系统COM组件提供COM和DLL接口(Windows环境) 以及共享库.so(Linux)形式,可支持所有支持COM接口调用的编程语言及脚本语言。 如:PHP、JSP、ASP、ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、...

    海景房商业网站的规划与设计

    本系统主要采用超文本连接语言HTML , JSP , Java脚本等技术来实现房产网上交易系统。使用SQL数据库系统,根据数据库逻辑设计的结果来建立数据表,这些用来存取购房系统所涉及的数据信息 使用软件:java5.0 Tomcat6.0...

    2018 猎豹网校 教程大全 资源难找赶紧保存吧

    猎豹网校 数据结构与算法_Java语言[MP4] 猎豹网校 数据结构与算法_C语言[MP4] 猎豹网校 软件测试快速入门[MP4] 猎豹网校 猎豹网校数据结构与算法_C#语言[MP4] 猎豹网校 快学快用 Excel 应用大全 中级教程[MP4] ...

    csw5.0中文分词组件

    在MS Windows平台下,本组件以COM接口的DLL格式进行封装,可支持所有支持COM接口调用的编程语言及脚本语言。如:PHP、JSP、ASP、 ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 3. ...

    InstallAnywhere v5.5.1--专业、强大的安装工具

    Metrowerks CodeWarrior V6.0 for Java IST Visaj BEA WebLogic Workshop BEA WebLogic Portal BEA WebLogic Tuxedo IBM WebSphere Studio Workbench IBM DB2 8.x Oracle 9i&quot;;;; 支持应用平台 &quot;;;...

    Python语法快速入门指南

    Python语言与Perl,C和Java等语言有许多相似之处。但是,也存在一些差异。 在本章中我们将来学习Python的基础语法,让你快速学会Python编程。 第一个Python程序 交互式编程 交互式编程不需要创建脚本文件,是通过 ...

    中文分词学习版

    在MS Windows平台下,本组件以COM接口的DLL格式进行封装,可支持所有支持COM接口调用的编程语言及脚本语言。如:PHP、JSP、ASP、ASP.net、C/C++ 、VC6.0 、VC.net、BC、C#、VB6.0 、VB.net、Delphi、Java等。 3. ...

    外文翻译 stus MVC

    This article introduces Struts, a Model-View-Controller implementation that uses servlets and JavaServer Pages (JSP) technology. Struts can help you control change in your Web project and promote ...

    xhEditor(可视化HTML编辑器) v1.2.1官方最新版.rar

    xhEditor完全基于Javascript开发,您可以应用在任何的服务端语言环境下,例如:PHP、ASP、ASP.NET、JAVA等。xhEditor可以在您的CMS、博客、论坛、商城等互联网平台上完美的嵌入运行,能够非常灵活简单的和您的系统...

    Editplusv3.31+注册码

    最近一直使用的是 EmEditor 6.0,但在编写 Perl 脚本时,发现 EmEditor 的语法高亮有一定问题,它甚至不能正确识别 =comment ... =cut 这样的 Perl 注释语句。而在 EditPlus 下,这种注释被支持得非常好。还有就是在...

Global site tag (gtag.js) - Google Analytics