`
wansong
  • 浏览: 20664 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

JDK6新特性:脚本语言支持(Scripting)

阅读更多
概述
JDK6增加了对脚本语言的支持(JSR 223),原理上是将脚本语言编译成bytecode,这样脚本语言也能享用Java平台的诸多优势,包括可移植性,安全等,另外,由于现在是编译成bytecode后再执行,所以比原来边解释边执行效率要高很多。加入对脚本语言的支持后,对Java语言也提供了以下好处。

1、许多脚本语言都有动态特性,比如,你不需要用一个变量之前先声明它,你可以用一个变量存放完全不同类型的对象,你不需要做强制类型转换,因为转换都是自动的。现在Java语言也可以通过对脚本语言的支持间接获得这种灵活性。

2、 可以用脚本语言快速开发产品原型,因为现在可以Edit-Run,而无需Edit-Compile-Run,当然,因为Java有非常好的IDE支持,我 们完全可以在IDE里面编辑源文件,然后点击运行(隐含编译),以此达到快速开发原型的目的,所以这点好处基本上可以忽略。

3、通过引入脚本语言可以轻松实现Java应用程序的扩展和自定义,我们可以把原来分布在在Java应用程序中的配置逻辑,数学表达式和业务规则提取出来,转用JavaScript来处理。

Sun的JDK6实现包含了一个基于Mozilla Rhino的 脚本语言引擎,支持JavaScript,这并不是说明JDK6只支持JavaScript,任何第三方都可以自己实现一个JSR-223兼容的脚本引擎 使得JDK6支持别的脚本语言,比如,你想让JDK6支持Ruby,那你可以自己按照JSR 223的规范实现一个Ruby的脚本引擎类,具体一点,你需要实现javax.script.ScriptEngine(简单起见,可以继承javax.script.AbstractScriptEngine)和javax.script.ScriptEngineFactory两个接口。当然,在你实现自己的脚本语言引擎之前,先到scripting.dev.java.net project 这里看看是不是有人已经帮你做了工作,这样你就可以直接拿来用就行。

Scripting API
Scripting API是用于在Java里面编写脚本语言程序的API, 在Javax.script中可以找到Scripting API,我们就是用这个API来编写JavaScript程序,这个包里面有一个ScriptEngineManager类,它是使用Scripting API的入口,ScriptEngineManager可以通过jar服务发现(service discovery)机制寻找合适的脚本引擎类(ScriptEngine),使用Scripting API的最简单方式只需下面三步
1、创建一个ScriptEngineManager对象
2、通过ScriptEngineManager获得ScriptEngine对象
3、用ScriptEngine的eval方法执行脚本

下面是一个Hello World程序

/** * @author chinajash */
public class HelloScript {
public static void main(Strin [] args) throws Exception {
ScriptEngineManager factory = new ScriptEngineManage();//step 1
ScriptEngine engine = factory.getEngineByName("JavaScript");//Step 2
engine.eval("print('Hello, Scripting')");//Step 3
}
}

运行上面程序,控制台会输出Hello, Scripting上面这个简单的Scripting程序演示了如何在Java里面运行脚本语言,除此之外,我们还可以利用Scripting API实现以下功能1、暴露Java对象为脚本语言的全局变量2、在Java中调用脚本语言的方法3、脚本语言可以实现Java的接口4、脚本语言可以像Java一样使用JDK平台下的类下面的类演示了以上4种功能

package Scripting;
import java.io.File;import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/** * @author chinajash */
public class ScriptingAPITester {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
testScriptVariables(engine);//演示如何暴露Java对象为脚本语言的全局变量
testInvokeScriptMethod(engine);//演示如何在Java中调用脚本语言的方法
testScriptInterface(engine);//演示脚本语言如何实现Java的接口
testUsingJDKClasses(engine);//演示脚本语言如何使用JDK平台下的类
}
public static void testScriptVariables(ScriptEngine engine) throws ScriptException{
File file = new File("test.txt");
engine.put("f", file);
engine.eval("println('Total Space:'+f.getTotalSpace())");
}
public static void testInvokeScriptMethod(ScriptEngine engine) throws Exception{
String script = "function hello(name) { return 'Hello,' + name;}";
engine.eval(script);
Invocable inv = (Invocable) engine;
String res = (String)inv.invokeFunction("hello", "Scripting" );
System.out.println("res:"+res);
}
public static void testScriptInterface(ScriptEngine engine) throws ScriptException{
String script = "var obj = new Object();
obj.run = function() { println('run method called');
}";
engine.eval(script);
Object obj = engine.get("obj");
Invocable inv = (Invocable) engine;
Runnable r = inv.getInterface(obj,Runnable.class);
Thread th = new Thread(r);
th.start();
}
public static void testUsingJDKClasses(ScriptEngine engine) throws Exception{
//Packages是脚本语言里的一个全局变量,专用于访问JDK的package
String js = "function doSwing(t){var f=new Packages.javax.swing.JFrame(t);
f.setSize(400,300);f.setVisible(true);}";
engine.eval(js);
Invocable inv = (Invocable) engine;
inv.invokeFunction("doSwing", "Scripting Swing" );
}
}
Scripting Tool

SUN提供的JDK6中有一个命令行工具??jrunscript,你可以在<JDK6_Home>/bin下面找到这个工具,jrunscript是一个脚本语言的解释程序,它独立于脚本语言,但默认是用JavaScript,我们可以用jrunscript来测试自己写的脚本语言是否正确,下面是一个在命令行运行jrunscript的简单例子
jrunscript
js>println("Hello,JrunScript");
Hello,JrunScript
js>9*8
72.0
js>

分享到:
评论

相关推荐

    jdk6新特性介绍

    Java Development Kit (JDK) 6是Java编程语言的一个重要版本,它在2006年发布,带来了许多新特性和改进,提升了开发者的效率和应用程序的性能。在这个版本中,Oracle(当时还是Sun Microsystems)引入了对JavaScript...

    JDK6的13个新特性

    JDK6是Java Development Kit的一个重要版本,它引入了许多新特性以增强开发人员的生产力和应用程序的性能。以下是对JDK6中13个新特性的详细解释: 1. **Desktop类**:这个类提供了与操作系统进行交互的能力,使得...

    JDK1.6新特性搜集整理

    2. **对脚本语言的支持**:JSR 223引入了Scripting API,使得Java平台能够支持多种脚本语言,如JavaScript、Groovy和Ruby,增强了Java的动态性和灵活性。这使得开发者可以在Java应用中无缝地使用脚本语言,提高了...

    JDK6的新特性.rar

    3. **脚本语言支持**: 通过JSR 223(Scripting for the Java Platform),JDK 6引入了对多种脚本语言(如JavaScript、Groovy和Ruby)的内置支持,允许开发者在Java应用程序中直接使用这些语言,提高了代码的灵活性...

    JDK6 的最新特性和支持的相关系统要求,有做J2EE的朋友们可以看看

    - **Scripting API**:引入了新的脚本引擎 API,使得在 Java 应用程序中更容易集成和使用脚本语言。 - **XML 解析器**:提供了更快、更安全的 XML 解析器,显著提高了处理 XML 数据的性能。 - **编译器和工具**:JDK...

    jdk1.6新特性 下载

    2. **动态语言支持** - JDK 1.6引入了JSR 223(Scripting for the Java Platform),这允许Java程序直接嵌入和执行各种脚本语言,如JavaScript和Ruby,提高了开发灵活性。 3. **Swing增强** - AWT(Abstract Window...

    java jdk6 32位

    - **Scripting API**:JDK 6引入了JSR 223(Java Scripting API),允许开发者在Java应用程序中嵌入和执行脚本语言。 - **Nashorn JavaScript引擎**:虽然在JDK 6中未完全实现,但JDK 7开始引入了Nashorn ...

    jdk包含6版本

    - **Scripting支持**:Java 6通过Java Scripting API引入了对脚本语言的支持,允许Java程序调用JavaScript或其他脚本语言的代码。 - **NIO.2(New IO)**:增加了对异步I/O操作的支持,提供了更高效的数据传输方式...

    jdk-6u43-windows-x64 64位

    7. **脚本语言支持**:通过Java Scripting API,JDK 6可以集成多种脚本语言,如JavaScript,为Java应用增加了灵活性。 8. **XML处理**:改进了Java Architecture for XML Binding (JAXB)和Java API for XML ...

    JDK1.6、JDK6下载

    3. **脚本语言支持**:JDK 6引入了JSR 223(Scripting for the Java Platform),允许在Java程序中嵌入和执行各种脚本语言,如JavaScript、Groovy等。 4. **XML处理改进**:JAXB(Java Architecture for XML ...

    java jdk1.6 新特性 jaxb2 demo

    JSR 223引入了脚本引擎接口,允许在Java应用程序中无缝集成各种脚本语言,如JavaScript、Groovy等,提升了动态编程的能力。 6. **JAXB 2.0**: JAXB 2.0是Java对象与XML之间的绑定框架,相比于之前的版本,它引入...

    jdk-6u20-windows-i586(官方下载地址)

    2. **动态语言支持**:JDK 6增加了对动态语言的支持,如JSR 223(Scripting for the Java Platform)和JSR 292( invokeDynamic 指令),使得在Java平台上运行脚本语言更加方便。 3. **XML处理增强**:包括StAX...

    jdk-6u45-windows-x64 jdk1.6 64位 Windows版

    1. **动态语言支持**:JDK1.6引入了Java Dynamic Language Toolkit (JDT),它使得Java平台能够更好地支持脚本语言和其他动态语言,如Ruby和Python。这主要通过JSR 223(Scripting for the Java Platform)实现,提供...

    jdk6中文版

    2. **动态语言支持**:引入了JSR 223(Scripting for the Java Platform),使得Java平台可以支持多种脚本语言,如JavaScript、Ruby等,增强了Java作为平台的灵活性。 3. **改进的Swing UI**:JDK 6对Swing组件进行...

    jdk6 64位安装包资源.

    6. **Scripting API**:支持JavaScript和其他脚本语言在 Java 平台上运行。 7. **改进的Swing和AWT**:提供更好的GUI设计和用户体验。 8. **JDBC 4.0**:增强了数据库连接池和自动重连功能。 9. **XML处理的改进*...

    Professional.Java.JDK.6.Edition

    3. **动态脚本语言支持**:通过JSR 223(Scripting for the Java Platform),JDK 6提供了对JavaScript和其他动态语言的内置支持,增强了Java平台的灵活性。 4. **改进的Swing组件**:Swing库在JDK 6中得到了显著...

    JDK6 Linux64位rpm版本

    7. **Scripting API**:允许在Java应用中使用脚本语言,如JavaScript。 8. **改进的XML支持**:增强了DOM、SAX和StAX解析器,提升了处理XML文档的效率。 9. **动态语言支持**:引入了invokedynamic指令,为运行时...

    JDK 6 中文帮助文档

    5. **Scripting API**:JDK 6引入了JSR 223,即脚本引擎API,允许开发者使用JavaScript或其他脚本语言与Java代码进行交互,促进了多语言集成的开发环境。 6. **Swing增强**:Swing组件库在JDK 6中得到了改进,包括...

    jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008.rar

    JDK 6是Java平台标准版(Java SE)的一个重要里程碑,它在JDK 5的基础上引入了许多新特性和改进。以下是这个版本的一些关键特性: 1. **改进的动态语言支持**:JDK 6增加了对动态语言的原生支持,如JavaScript和...

    JDK12-java-scripting-programmers-guide.pdf

    该API提供了一个灵活的框架,支持多种脚本语言,包括JavaScript、Python、Ruby等。 脚本引擎 脚本引擎是Java Scripting API的核心组件,负责执行脚本代码。Java Scripting API提供了多种脚本引擎,包括 Rhino引擎...

Global site tag (gtag.js) - Google Analytics