- 浏览: 241748 次
- 性别:
- 来自: 广州
文章分类
- 全部博客 (172)
- J2SE学习模块 (35)
- Oracle学习模块 (12)
- Jsp学习模块 (11)
- Servlet学习模块 (1)
- Tomcat 模块 (4)
- Struts1.x学习模块 (5)
- Spring学习模块 (2)
- Hibernate学习模块 (11)
- XML学习模块 (1)
- UML学习模块 (0)
- 算法学习模块 (6)
- 设计模式模块 (2)
- Mysql学习模块 (1)
- SQL_Server学习模块 (8)
- 项目开发模块 (10)
- 搜索引擎 (14)
- 开发工具的使用 (2)
- 面试题集 (7)
- 开发工具 (8)
- Linux (5)
- JavaFX模块 (1)
- 程序与人生 (4)
- 计算机网络 (6)
- EJB学习模块 (1)
- javascript常用模块 (2)
- 英语学习 (1)
- 程序变量命名的几条法则:匈牙利命名法 (1)
- 驼峰式大小写 (1)
- 帕斯卡命名法 (1)
- Jquery控制图片宽度及高度 (1)
- 喜讯--FireFox7.01已经支持CSS中 text-overflow ellipsis 属性 (1)
- 遍历 Map 的三种 常用方法 java (1)
- JDK自带工具Jstat (1)
- 提高 Oracle 查询 效率 建议 (1)
- 常用工具 (1)
最新评论
-
a465492689:
挺好,谢谢分享
存储过程 -
huangqinghe:
ding 顶~~~
Intellij Idea12 中文乱码问题总结 -
Redpick13:
楼主好人啊,有耐心
Java中的二维数组的定义与学习 -
dandongsoft:
神鼎飞丹砂
java.lang.NoClassDefFoundError: org/apache/lucene/index/memory/MemoryIndex -
devil__lord:
不错讲得很清楚 color=#cff
Java中的二维数组的定义与学习
简介: Java™ 语言足以满足您的一些项目的需求,但是脚本语言在性能方面一直表现不佳。Java Scripting API (javax.script) 支持在 Java 程序中调用脚本,反之亦然,通过本文,您将了解它在这两方面是如何做到最好的。
现在,许多 Java 开发人员都喜欢在 Java 平台中使用脚本语言,但是使用编译到 Java 字节码中的动态语言有时是不可行的。在某些情况中,直接编写一个 Java 应用程序的脚本 部分 或者在一个脚本中调用特定的 Java 对象是更快捷、更高效的方法。
这就是 javax.script 产生的原因了。Java Scripting API 是从 Java 6 开始引入的,它填补了便捷的小脚本语言和健壮的 Java 生态系统之间的鸿沟。通过使用 Java Scripting API,您就可以在您的 Java 代码中快速整合几乎所有的脚本语言,这使您能够在解决一些很小的问题时有更多可选择的方法。
1. 使用 jrunscript 执行 JavaScript
每一个新的 Java 平台发布都会带来新的命令行工具集,它们位于 JDK 的 bin 目录。Java 6 也一样,其中 jrunscript 便是 Java 平台工具集中的一个不小的补充。
设想一个编写命令行脚本进行性能监控的简单问题。这个工具将借用 jmap(见本系列文章 前一篇文章 中的介绍),每 5 秒钟运行一个 Java 进程,从而了解进程的运行状况。一般情况下,我们会使用命令行 shell 脚本来完成这样的工作,但是这里的服务器应用程序部署在一些差别很大的平台上,包括 Windows® 和 Linux®。系统管理员将会发现编写能够同时运行在两个平台的 shell 脚本是很痛苦的。通常的做法是编写一个 Windows 批处理文件和一个 UNIX® shell 脚本,同时保证这两个文件同步更新。
但是,任何阅读过 The Pragmatic Programmer 的人都知道,这严重违反了 DRY (Don't Repeat Yourself) 原则,而且会产生许多缺陷和问题。我们真正希望的是编写一种与操作系统无关的脚本,它能够在所有的平台上运行。
当然,Java 语言是平台无关的,但是这里并不是需要使用 “系统” 语言的情况。我们需要的是一种脚本语言 — 如,JavaScript。
清单 1 显示的是我们所需要的简单 shell 脚本:
清单 1. periodic.js
当然,解决方法是 JDK 所带的 jrunscript 实用程序,如清单 2 所示:
清单 2. jrunscript
注意,您也可以使用 for 循环按照指定的次数来循环执行这个脚本,然后才退出。基本上,jrunscript 能够让您执行 JavaScript 的所有操作。惟一不同的是它的运行环境不是浏览器,所以运行中不会有 DOM。因此,最顶层的函数和对象稍微有些不同。
因为 Java 6 将 Rhino ECMAScript 引擎作为 JDK 的一部分,jrunscript 可以执行任何传递给它的 ECMAScript 代码,不管是一个文件(如此处所示)或是在更加交互式的 REPL(“Read-Evaluate-Print-Loop”)shell 环境。运行 jrunscript 就可以访问 REPL shell。
--------------------------------------------------------------------------------
2. 从脚本访问 Java 对象
能够编写 JavaScript/ECMAScript 代码是非常好的,但是我们不希望被迫重新编译我们在 Java 语言中使用的所有代码 — 这是违背我们初衷的。幸好,所有使用 Java Scripting API 引擎的代码都完全能够访问整个 Java 生态系统,因为本质上一切代码都还是 Java 字节码。所以,回到我们之前的问题,我们可以在 Java 平台上使用传统的 Runtime.exec() 调用来启动进程,如清单 3 所示:
清单 3. Runtime.exec() 启动 jmap
数组 arguments 是指向传递到这个函数参数的 ECMAScript 标准内置引用。在最顶层的脚本环境中,则是传递给脚本本身的的参数数组(命令行参数)。所以,在清单 3 中,这个脚本预期接收一个参数,该参数包含要映射的 Java 进程的 VMID。
除此之外,我们可以利用本身为一个 Java 类的 jmap,然后直接调用它的 main() 方法,如清单 4 所示。有了这个方法,我们不需要 “传输” Process 对象的 in/out/err 流。
清单 4. JMap.main()
Packages 语法是一个 Rhino ECMAScript 标识,它指向已经 Rhino 内创建的位于核心 java.* 包之外的 Java 包。
--------------------------------------------------------------------------------
3. 从 Java 代码调用脚本
从脚本调用 Java 对象仅仅完成了一半的工作:Java 脚本环境也提供了从 Java 代码调用脚本的功能。这只需要实例化一个 ScriptEngine 对象,然后加载和评估脚本,如清单 5 所示:
清单 5. Java 平台的脚本调用
eval() 方法也可以直接操作一个 String,所以这个脚本不一定必须是文件系统的一个文件 — 它可以来自于数据库、用户输入,或者甚至可以基于环境和用户操作在应用程序中生成。
--------------------------------------------------------------------------------
4. 将 Java 对象绑定到脚本空间
仅仅调用一个脚本还不够:脚本通常会与 Java 环境中创建的对象进行交互。这时,Java 主机环境必须创建一些对象并将它们绑定,这样脚本就可以很容易找到和使用这些对象。这个过程是 ScriptContext 对象的任务,如清单 6 所示:
清单 6. 为脚本绑定对象
访问所绑定的对象很简单 — 所绑定对象的名称是作为全局命名空间引入到脚本的,所以在 Rhino 中使用 Person 很简单,如清单 7 所示:
清单 7. 是谁撰写了本文?
您可以看到,JavaBeans 样式的属性被简化为使用名称直接访问,这就好像它们是字段一样。
--------------------------------------------------------------------------------
5. 编译频繁使用的脚本
脚本语言的缺点一直存在于性能方面。其中的原因是,大多数情况下脚本语言是 “即时” 解译的,因而它在执行时会损失一些解析和验证文本的时间和 CPU 周期。运行在 JVM 的许多脚本语言最终会将接收的代码转换为 Java 字节码,至少在脚本被第一次解析和验证时进行转换;在 Java 程序关闭时,这些即时编译的代码会消失。将频繁使用的脚本保持为字节码形式可以帮助提升可观的性能。
我们可以以一种很自然和有意义的方法使用 Java Scripting API。如果返回的 ScriptEngine 实现了 Compilable 接口,那么这个接口所编译的方法可用于将脚本(以一个 String 或一个 Reader 传递过来的)编译为一个 CompiledScript 实例,然后它可用于在 eval() 方法中使用不同的绑定重复地处理编译后的代码,如清单 8 所示:
清单 8. 编译解译后的代码
--------------------------------------------------------------------------------
结束语
Java Scripting API 在扩展 Java 程序的范围和功能方面前进了很大一步,并且它将脚本语言的编码效率的优势带到 Java 环境。jrunscript — 它显然不是很难编写的程序 — 以及 javax.script 给 Java 开发人员带来了诸如 Ruby (JRuby) 和 ECMAScript (Rhino) 等脚本语言的优势,同时还不会破坏 Java 环境的生态系统和可扩展性。
转载自:http://www.ibm.com/developerworks/cn/java/j-5things9.html
现在,许多 Java 开发人员都喜欢在 Java 平台中使用脚本语言,但是使用编译到 Java 字节码中的动态语言有时是不可行的。在某些情况中,直接编写一个 Java 应用程序的脚本 部分 或者在一个脚本中调用特定的 Java 对象是更快捷、更高效的方法。
这就是 javax.script 产生的原因了。Java Scripting API 是从 Java 6 开始引入的,它填补了便捷的小脚本语言和健壮的 Java 生态系统之间的鸿沟。通过使用 Java Scripting API,您就可以在您的 Java 代码中快速整合几乎所有的脚本语言,这使您能够在解决一些很小的问题时有更多可选择的方法。
1. 使用 jrunscript 执行 JavaScript
每一个新的 Java 平台发布都会带来新的命令行工具集,它们位于 JDK 的 bin 目录。Java 6 也一样,其中 jrunscript 便是 Java 平台工具集中的一个不小的补充。
设想一个编写命令行脚本进行性能监控的简单问题。这个工具将借用 jmap(见本系列文章 前一篇文章 中的介绍),每 5 秒钟运行一个 Java 进程,从而了解进程的运行状况。一般情况下,我们会使用命令行 shell 脚本来完成这样的工作,但是这里的服务器应用程序部署在一些差别很大的平台上,包括 Windows® 和 Linux®。系统管理员将会发现编写能够同时运行在两个平台的 shell 脚本是很痛苦的。通常的做法是编写一个 Windows 批处理文件和一个 UNIX® shell 脚本,同时保证这两个文件同步更新。
但是,任何阅读过 The Pragmatic Programmer 的人都知道,这严重违反了 DRY (Don't Repeat Yourself) 原则,而且会产生许多缺陷和问题。我们真正希望的是编写一种与操作系统无关的脚本,它能够在所有的平台上运行。
当然,Java 语言是平台无关的,但是这里并不是需要使用 “系统” 语言的情况。我们需要的是一种脚本语言 — 如,JavaScript。
清单 1 显示的是我们所需要的简单 shell 脚本:
清单 1. periodic.js
while (true) { echo("Hello, world!"); }由于经常与 Web 浏览器打交道,许多 Java 开发人员已经知道了 JavaScript(或 ECMAScript;JavaScript 是由 Netscape 开发的一种 ECMAScript 语言)。问题是,系统管理员要如何运行这个脚本?
当然,解决方法是 JDK 所带的 jrunscript 实用程序,如清单 2 所示:
清单 2. jrunscript
C:\developerWorks\5things-scripting\code\jssrc>jrunscript periodic.js Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! Hello, world! ...
注意,您也可以使用 for 循环按照指定的次数来循环执行这个脚本,然后才退出。基本上,jrunscript 能够让您执行 JavaScript 的所有操作。惟一不同的是它的运行环境不是浏览器,所以运行中不会有 DOM。因此,最顶层的函数和对象稍微有些不同。
因为 Java 6 将 Rhino ECMAScript 引擎作为 JDK 的一部分,jrunscript 可以执行任何传递给它的 ECMAScript 代码,不管是一个文件(如此处所示)或是在更加交互式的 REPL(“Read-Evaluate-Print-Loop”)shell 环境。运行 jrunscript 就可以访问 REPL shell。
--------------------------------------------------------------------------------
2. 从脚本访问 Java 对象
能够编写 JavaScript/ECMAScript 代码是非常好的,但是我们不希望被迫重新编译我们在 Java 语言中使用的所有代码 — 这是违背我们初衷的。幸好,所有使用 Java Scripting API 引擎的代码都完全能够访问整个 Java 生态系统,因为本质上一切代码都还是 Java 字节码。所以,回到我们之前的问题,我们可以在 Java 平台上使用传统的 Runtime.exec() 调用来启动进程,如清单 3 所示:
清单 3. Runtime.exec() 启动 jmap
var p = java.lang.Runtime.getRuntime().exec("jmap", [ "-histo", arguments[0] ]) p.waitFor()
数组 arguments 是指向传递到这个函数参数的 ECMAScript 标准内置引用。在最顶层的脚本环境中,则是传递给脚本本身的的参数数组(命令行参数)。所以,在清单 3 中,这个脚本预期接收一个参数,该参数包含要映射的 Java 进程的 VMID。
除此之外,我们可以利用本身为一个 Java 类的 jmap,然后直接调用它的 main() 方法,如清单 4 所示。有了这个方法,我们不需要 “传输” Process 对象的 in/out/err 流。
清单 4. JMap.main()
var args = [ "-histo", arguments[0] ] Packages.sun.tools.jmap.JMap.main(args)
Packages 语法是一个 Rhino ECMAScript 标识,它指向已经 Rhino 内创建的位于核心 java.* 包之外的 Java 包。
--------------------------------------------------------------------------------
3. 从 Java 代码调用脚本
从脚本调用 Java 对象仅仅完成了一半的工作:Java 脚本环境也提供了从 Java 代码调用脚本的功能。这只需要实例化一个 ScriptEngine 对象,然后加载和评估脚本,如清单 5 所示:
清单 5. Java 平台的脚本调用
import java.io.*; import javax.script.*; public class App { public static void main(String[] args) { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); for (String arg : args) { FileReader fr = new FileReader(arg); engine.eval(fr); } } catch(IOException ioEx) { ioEx.printStackTrace(); } catch(ScriptException scrEx) { scrEx.printStackTrace(); } } }
eval() 方法也可以直接操作一个 String,所以这个脚本不一定必须是文件系统的一个文件 — 它可以来自于数据库、用户输入,或者甚至可以基于环境和用户操作在应用程序中生成。
--------------------------------------------------------------------------------
4. 将 Java 对象绑定到脚本空间
仅仅调用一个脚本还不够:脚本通常会与 Java 环境中创建的对象进行交互。这时,Java 主机环境必须创建一些对象并将它们绑定,这样脚本就可以很容易找到和使用这些对象。这个过程是 ScriptContext 对象的任务,如清单 6 所示:
清单 6. 为脚本绑定对象
import java.io.*; import javax.script.*; public class App { public static void main(String[] args) { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); for (String arg : args) { Bindings bindings = new SimpleBindings(); bindings.put("author", new Person("Ted", "Neward", 39)); bindings.put("title", "5 Things You Didn't Know"); FileReader fr = new FileReader(arg); engine.eval(fr, bindings); } } catch(IOException ioEx) { ioEx.printStackTrace(); } catch(ScriptException scrEx) { scrEx.printStackTrace(); } } }
访问所绑定的对象很简单 — 所绑定对象的名称是作为全局命名空间引入到脚本的,所以在 Rhino 中使用 Person 很简单,如清单 7 所示:
清单 7. 是谁撰写了本文?
println("Hello from inside scripting!") println("author.firstName = " + author.firstName)
您可以看到,JavaBeans 样式的属性被简化为使用名称直接访问,这就好像它们是字段一样。
--------------------------------------------------------------------------------
5. 编译频繁使用的脚本
脚本语言的缺点一直存在于性能方面。其中的原因是,大多数情况下脚本语言是 “即时” 解译的,因而它在执行时会损失一些解析和验证文本的时间和 CPU 周期。运行在 JVM 的许多脚本语言最终会将接收的代码转换为 Java 字节码,至少在脚本被第一次解析和验证时进行转换;在 Java 程序关闭时,这些即时编译的代码会消失。将频繁使用的脚本保持为字节码形式可以帮助提升可观的性能。
我们可以以一种很自然和有意义的方法使用 Java Scripting API。如果返回的 ScriptEngine 实现了 Compilable 接口,那么这个接口所编译的方法可用于将脚本(以一个 String 或一个 Reader 传递过来的)编译为一个 CompiledScript 实例,然后它可用于在 eval() 方法中使用不同的绑定重复地处理编译后的代码,如清单 8 所示:
清单 8. 编译解译后的代码
import java.io.*; import javax.script.*; public class App { public static void main(String[] args) { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript"); for (String arg : args) { Bindings bindings = new SimpleBindings(); bindings.put("author", new Person("Ted", "Neward", 39)); bindings.put("title", "5 Things You Didn't Know"); FileReader fr = new FileReader(arg); if (engine instanceof Compilable) { System.out.println("Compiling...."); Compilable compEngine = (Compilable)engine; CompiledScript cs = compEngine.compile(fr); cs.eval(bindings); } else engine.eval(fr, bindings); } } catch(IOException ioEx) { ioEx.printStackTrace(); } catch(ScriptException scrEx) { scrEx.printStackTrace(); } } }在大多数情况中,CompiledScript 实例需要存储在一个长时间存储中(例如,servlet-context),这样才能避免一次次地重复编译相同的脚本。然而,如果脚本发生变化,您就需要创建一个新的 CompiledScript 来反映这个变化;一旦编译完成,CompiledScript 就不再执行原始的脚本文件内容。
--------------------------------------------------------------------------------
结束语
Java Scripting API 在扩展 Java 程序的范围和功能方面前进了很大一步,并且它将脚本语言的编码效率的优势带到 Java 环境。jrunscript — 它显然不是很难编写的程序 — 以及 javax.script 给 Java 开发人员带来了诸如 Ruby (JRuby) 和 ECMAScript (Rhino) 等脚本语言的优势,同时还不会破坏 Java 环境的生态系统和可扩展性。
转载自:http://www.ibm.com/developerworks/cn/java/j-5things9.html
发表评论
-
巧用JDK自带工具Jstat查看Gc垃圾回收之使用方法
2012-07-19 09:40 3915如何查看JVM中内存使用情况如何? JVM垃圾回收是否正常? ... -
遍历Map的三种常用方法 java
2011-11-09 12:06 28861、一般的map定义: Map<Key, Object& ... -
程序变量命名的几条法则:匈牙利命名法,驼峰式大小写,帕斯卡命名法
2011-09-07 17:54 51301.匈牙利命名法的好处: ... -
JDK源码中对当前时间的一些用法
2011-09-05 14:51 1079JDK源码中对当前时间的一些用法: String[] ... -
Eclipse安装反编译工具查看Jar包源码 JD Eclipse插件
2011-08-24 10:37 5089如何在Eclipse中安装反编译工具查看Jar包源码呢? 打 ... -
Struts2图片上传成功后,异常:java.lang.IllegalStateException
2011-07-10 18:49 19481.场景: 使用Struts2图片上传成功后出现异常: ... -
J2EE表生成器@TableGenerator
2011-03-31 14:29 1726最近工作中遇到了许多 ... -
Spring Hibernate Extjs开发指南
2011-03-23 18:08 982从学习到找工作,然后再面试,最后才经历上班; 从这段时间对自 ... -
获取当前时间的前三个月 java
2011-03-17 11:14 4743获取当前时间的前三个月: Date date = n ... -
java 线程的状态与控制
2010-12-16 20:54 1123一、线程的状态 线程的主要状态有: 1.新 ... -
MyEclipse Blue 6.5 注册码 可到2013年12月
2010-12-06 09:44 1520做Java软件开发的,首选的软件工具莫非是MyEclip ... -
关于 Java Collections API 您不知道的 5 件事,第 2 部分
2010-10-24 00:28 524简介: 您可以在任何地方使用 Java™ 集合,但是一定要小心 ... -
关于 Java 常用工具您不知道的 5 件事
2010-10-24 00:25 520简介: 有些 Java™ 工具无法分类,只能算作 “有用的东西 ... -
关于 JVM 命令行标志您不知道的 5 件事
2010-10-24 00:22 764简介: Java™ 虚拟机有数百个命令行选项,被经验丰富的开发 ... -
关于 Java Database Connectivity 您不知道的 5 件事
2010-10-24 00:21 501简介: JDBC,即 Java™ Database Conne ... -
关于 Java 性能监控您不知道的 5 件事,第 2 部分
2010-10-24 00:15 565简介: 如果 JDK 中配置有全功能分析器 JConsole ... -
关于 Java 性能监控您不知道的 5 件事,第 1 部分
2010-10-24 00:13 759简介: 责怪糟糕的代码 ... -
关于 JAR 您不知道的 5 件事
2010-10-24 00:11 404简介: 除了一些基础的 JAR 之外,许多 Java™ 开发人 ... -
关于 java.util.concurrent 您不知道的 5 件事,第 2 部分
2010-10-24 00:05 482简介: 除了具有很好的并发性的 Collections,jav ... -
关于 java.util.concurrent 您不知道的 5 件事,第 1 部分
2010-10-24 00:02 490简介: 编写能够良好执行,防止应用程序受损的多线程代码是很艰巨 ...
相关推荐
SAP GUI Scripting API for the Windows and Java Platforms
The SAP GUI Scripting API is an automation interface that enhances the capabilities of SAP GUI for Windows. Using this interface, end users may automate repetitive tasks by recording and running macro...
本资源主要介绍了 Java 平台标准版的脚本编程指南,旨在帮助开发者更好地使用 Java Scripting API 实现自动化和集成任务。下面是对资源的详细解读: 脚本编程概念 Java Scripting API 是 Java 平台标准版的一部分...
Java Scripting API是Java平台标准版的一部分,允许开发人员在Java应用程序中嵌入脚本语言。该指南将详细介绍Java Scripting API的使用、脚本引擎、脚本上下文、脚本变量、脚本执行、脚本安全等方面的知识点。 Java...
java.lang.reflect 提供类和接口,以获得关于类和对象的反射信息。 java.math 提供用于执行任意精度整数算法 (BigInteger) 和任意精度小数算法 (BigDecimal) 的类。 java.net 为实现网络应用程序提供类。 java.nio ...
Java Scripting Programmer's Guide Java Scripting Programmer's Guide是Java Platform, Standard Edition的一部分,旨在帮助开发者使用Java scripting来实现复杂的应用程序。以下是Java Scripting Programmer's ...
脚本语言在现代软件开发中的应用越来越广泛,Java平台通过引入JSR 223(Java Scripting API)和JSR 433(Java Scripting for the JVM)使得在Java环境中使用脚本语言变得可能和方便。本书详细探讨了如何在Java应用...
总之,Java 6 API中文版对于任何Java开发者来说都是不可或缺的参考资料,无论是在开发新项目还是维护旧代码时,都能提供强大的帮助。通过深入理解并熟练运用Java 6 API,开发者可以编写出更高效、更可靠的代码。
Java 脚本 API,也称为 Java Scripting API,是Java平台标准版(Java SE)的一部分,它允许Java应用程序在运行时执行脚本语言代码。这个API在Java 6版本中得到了显著增强,为开发者提供了在Java程序中嵌入和执行脚本...
基于 Google V8 Javascript 引擎的 Java Scripting API (JSR223) 的实现。 Java 规范请求 (JSR) 223 通过定义标准框架和应用程序编程接口 (API) 来帮助开发人员集成 Java 技术和脚本语言,以执行以下操作: 从脚本...
Scripting in Java starts with the explanation of basic scripting concepts and mechanisms needed for implementating scripting languages on the Java platform. Next, it focuses on particular languages ...
8. **动态类型语言支持**:通过JSR 223(Java Scripting API),Java 7增加了对动态语言的支持,如Groovy、JavaScript等。 9. **改进的Swing组件**:Java 7对Swing组件进行了优化,提高了UI的响应速度和用户体验。 ...
SAP GUI Scripting API 用户手册开发文档是针对2023年最新版本的SAP GUI自动化工具的重要参考资料,旨在帮助开发者和系统管理员更好地利用API在Windows和Java平台上自动化SAP客户端的操作。API提供了丰富的对象和...
【Java API 6详解】 Java API 6,全称为Java Application Programming Interface的第六个主要版本,是Java开发历史上的一个重要里程碑。它在2006年发布,为开发者提供了大量新特性和改进,提升了Java平台的性能、...
在Java 6(J2SE 6)中,进一步增强了API,包括Swing组件的改进、动态代理、NIO.2(非阻塞I/O)、Scripting API、改进的XML处理和Java数据库连接(JDBC)4.0。动态代理允许在运行时创建符合特定接口的代理对象。NIO....
5. **Scripting API**:`javax.script`包的引入,允许Java应用程序利用各种脚本语言(如JavaScript、Ruby等)进行嵌入式脚本执行,促进了脚本语言与Java的交互。 6. **XML处理改进**:Java 6对XML处理API进行了优化...
1. **动态语言支持**:引入了JSR 223(Java Scripting API),允许在Java程序中嵌入和执行多种脚本语言,如JavaScript、Groovy等,提升了Java平台的灵活性。 2. **改进的编译器**:Java 6.0的javac编译器性能得到了...
JavaScripting 是一个专门为初学者设计的在线互动教程,旨在帮助学习者通过实践来掌握JavaScript编程语言。这个"javascripting-源码.rar"压缩包可能包含了整个教程的源代码,包括HTML、CSS和JavaScript文件,以及...
6. **脚本引擎**:JDK6.0引入了JSR 223,即Scripting for the Java Platform,允许在Java应用程序中嵌入和执行各种脚本语言,如JavaScript、Groovy等。 7. **改进的Swing组件**:Swing库在JDK6.0中得到增强,包括新...