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

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 嗎?

相关推荐

    java6.0 中文API

    10. **Java 脚本引擎**:Java 6.0 引入了 `javax.script` 包,支持运行 JavaScript 和其他脚本语言,增强了 Java 作为服务器端平台的能力。 在使用 Java 6.0 中文 API 时,开发者可以参考文档中的方法描述、示例...

    java6.0 API 英文版

    Java 6.0还引入了新的脚本引擎API(JSR 223),允许Java程序内嵌入并执行各种脚本语言,如JavaScript、Groovy等,增强了Java的灵活性和可扩展性。 在安全管理方面,Java 6.0加强了默认的安全策略,同时提供了更好的...

    Java 6.0中文参考手册(最新版).chm

    在语言层面,Java 6.0增加了对动态语言的支持,引入了 invokedynamic 指令,这是Java虚拟机(JVM)的一个重大改变,为运行时绑定和脚本语言集成提供了基础。此外,枚举类型(enum)的增强使得枚举常量的使用更加安全...

    JAVA6.0学习笔记PDF版

    4. **脚本语言支持**:通过JSR 223,Java 6.0可以嵌入和执行各种脚本语言,如JavaScript、Groovy等,增强了平台的灵活性。 5. **改进的动态代理**:增强了Java反射API,使得动态代理的创建更为简单和高效。 6. **...

    中文java的api6.0

    4. **动态语言支持**:Java 6.0引入了Java Dynamic Language Toolkit (JDT),支持脚本语言如JavaScript、Ruby等在Java平台上运行。 5. **改进的JDBC**:Java数据库连接API在6.0版本中增强了对存储过程的支持,同时...

    JavaAPI_6.0

    1. **动态语言支持**:引入了JSR 223(Java Scripting API),允许在Java程序中嵌入和执行多种脚本语言,如JavaScript、Groovy等,提升了Java平台的灵活性。 2. **改进的编译器**:Java 6.0的javac编译器性能得到了...

    java安装程序,6.0

    2. **Java动态语言支持**:Java 6.0引入了JSR 223(Scripting for the Java Platform),允许开发者在Java程序中使用各种脚本语言,增强了语言的灵活性。 3. **改进的数据库连接(JDBC)**:新的JDBC 4.0 API提供...

    JDK_API_1_6_zh_CN.rar_JAVA6.0 API_

    - **JSR 223**:引入了脚本引擎接口,支持JavaScript、Groovy等脚本语言在Java中的执行。 10. **改进的JVM和编译器** - **HotSpot VM**:优化了垃圾收集器,提升了性能。 - **编译器JIT**:即时编译器(Just-In-...

    JAVA SE 6.0 中文版 API 手册

    通过阅读和理解《JAVA SE 6.0 中文版 API 手册》,开发者可以深入学习Java语言的核心特性,熟练掌握Java API的使用,从而编写出高效、稳定的Java应用程序。无论你是初学者还是经验丰富的开发者,这份手册都是你不可...

    Java API6.0 API规范

    - **脚本引擎API**:引入了新的脚本引擎API,使得在Java应用程序中集成脚本语言变得更加简单。 ### 关键类库介绍 #### 1. **java.util.concurrent** Java 6.0在`java.util.concurrent`包中增加了许多新特性,这些...

    Eclipse_java6.0_oracl11g_tomcat6.0_S2SH_知识库系统

    标题"Eclipse_java6.0_oracl11g_tomcat6.0_S2SH_知识库系统"涉及的关键技术栈主要包括Java编程语言、Oracle 11g数据库、Eclipse集成开发环境以及Tomcat 6.0应用服务器,以及Struts2、Spring和Hibernate(简称S2SH)...

    良葛格java jdk 6.0学习笔记代码.rar

    3. **动态语言支持**:JDK 6.0通过JSR 223(Scripting for the Java Platform)引入了对脚本语言的支持,允许在Java程序中嵌入JavaScript、Groovy等脚本语言。 4. **改进的JDBC API**:更新的JDBC API提供了对...

    JAVA API 6.0中文文档

    5. **脚本引擎支持**:Java 6添加了对脚本语言的支持,如JavaScript,这使得开发者可以在Java环境中直接执行脚本代码,提高了开发效率。 6. **国际化和本地化**:Java API 6.0提供了完善的国际化和本地化支持,帮助...

    JAVA6.0 FOR WIN(32+64)[jre-6u16-windows-i586/jre-6u29-windows-x64]

    5. **动态语言支持**:JSR 223(Scripting for the Java Platform)使得Java平台可以支持多种脚本语言,如JavaScript、Ruby等。 6. **XML处理改进**:StAX(Streaming API for XML)成为标准API,提供了一种高效的...

    JAVA SE6.0 API文档

    9. **脚本引擎支持**:Java 6通过`javax.script`包添加了对脚本语言(如JavaScript、Groovy等)的支持,可以在Java环境中直接运行和集成这些脚本。 10. **JDBC 4.0**:Java Database Connectivity (JDBC) API在Java...

    java6.0源码-lod2:lod2

    Java 6.0改进了JVM(Java虚拟机),引入了动态语言支持,使得开发者可以更方便地使用Groovy、Ruby等脚本语言。此外,Java 6.0的Swing组件得到了增强,提供了更好的UI体验,如新的LookAndFeel和轻量级组件。更重要的...

    java6.0源码-pierce-oneill-cv:我的简历

    4. **动态语言支持**:Java 6.0引入了JSR 223,即脚本引擎API,使得开发者可以方便地在Java应用程序中使用JavaScript、Groovy等动态语言。 5. **改进的数据库连接(JDBC)**:JDBC 4.0在Java 6.0中引入,提供了自动...

    JAVASE6.0_Api_en\docs\api

    6. **动态语言支持**:Java 6.0添加了JSR 223(Scripting for the Java Platform),允许在Java应用程序中嵌入和执行脚本语言,如JavaScript、Groovy等。 7. **改进的JDBC**:Java 6.0的JDBC API提供更好的连接池...

    [Java参考文档].JDK6.0API官方中文版.zip

    6. **脚本引擎**:JDK6.0引入了JSR 223,即Scripting for the Java Platform,允许在Java应用程序中嵌入和执行各种脚本语言,如JavaScript、Groovy等。 7. **改进的Swing组件**:Swing库在JDK6.0中得到增强,包括新...

    java 2 ee 6.0 javadoc api

    JSP 2.2版本引入了简化脚本元素、表达式语言(EL)改进以及自定义标签库的增强。 3. **JavaServer Faces (JSF)**:JSF是一种MVC(模型-视图-控制器)框架,用于构建用户界面。JSF 2.0在Java EE 6.0中引入了Facelets...

Global site tag (gtag.js) - Google Analytics