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(String[] args) throws Exception{
ScriptEngineManager factory = new ScriptEngineManager();//step1
ScriptEngine engine =factory.getEngineByName("JavaScript");//Step2
engine.eval("print('Hello, Scripting')");//Step3
}
}
运行上面程序,控制台会输出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('TotalSpace:'+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", "ScriptingSwing" );
}
} //class end;
ScriptingTool
--------------------------------------------------------------------------------
SUN提供的JDK6中有一个命令行工具jrunscript,你可以在<JDK6_Home>/bin下面找到这个工具,jrunscript是一个脚本语言的解释程序,它独立于脚本语言,但默认是用JavaScript,我们可以用jrunscript来测试自己写的脚本语言是否正确,下面是一个在命令行运行jrunscript的简单例子
jrunscript
js>println("Hello,JrunScript");
Hello,JrunScript
js>9*8
72.0
js>
Rihno的介绍:可以参看
Rhino -- 基于java的javascript实现
http://www.cnblogs.com/cczw/archive/2012/07/16/2593957.html
分享到:
相关推荐
mac for jdk1.6 jdk6 安装版 里面有两个jdk1.6的安装包,都可以用 如果电脑上安装有1.7,1.8等高版本jdk就不要再下安装包了,安装包安装会报错 命令是这个:brew install java6或 brew install homebrew/cask-...
标题中的“jdk1.6集成jjwt的问题”指的是在Java Development Kit (JDK) 版本1.6的环境下,尝试整合JSON Web Token (JWT) 库jjwt时遇到的挑战。JWT是一种开放标准(RFC 7519),用于在各方之间安全地传输信息作为 ...
1.okhttp3.8源码使用jdk1.6重新编译,已集成了okio,在javaweb项目中使用,未在安卓项目中使用 2.okhttp3.8源码使用jdk1.6重新编译_okhttp3.8.0-jdk1.6.jar
aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-15.8.0-jdk1.6aspose-words-...
总的来说,OkHttp3.8.0-jdk1.6.zip的发布,不仅满足了低版本JDK用户的需求,也体现了开发者对旧有技术栈的持续支持,体现了技术的包容性和持久性。在实际项目中,开发者只需简单引入这两个jar文件,就可以充分利用...
10. **Java EE集成**:JDK 1.6对Java企业版(Java EE)的集成有了更好的支持,使得开发Web应用和企业级应用更为便捷。 总的来说,JDK 1.6在提升开发效率、运行性能以及安全性等方面都有显著的进步,是Java发展历程...
- **改进的脚本支持**:添加了对JavaScript和其他脚本语言的支持。 **3. 安装与配置** - **下载**:从Oracle官网或其他可信源下载JDK 1.6的安装文件,如"jdk1.6.exe"。 - **安装**:双击执行安装文件,按照向导步骤...
5. **脚本引擎支持**:通过`javax.script`包支持脚本语言的嵌入式执行,方便开发者编写混合Java和其他脚本语言的应用程序。 ### 三、JDK1.6的下载与安装 #### 下载方式 - **官方渠道**:通常推荐从Oracle官方网站...
- **JSR 292**:支持动态语言,引入了invokedynamic指令,使得Java平台更适合脚本语言。 总的来说,JDK1.6是Java开发的重要里程碑,虽然现在已经有了更新的版本,但对于某些老项目或者特定环境,JDK1.6仍然是必要的...
值得注意的是,虽然JDK 1.6已经比较老旧,许多现代的Java应用和框架可能不再支持这个版本,开发者通常会被建议使用更新的JDK版本,例如JDK 8或更高。然而,在某些特殊情况下,如旧项目维护或与特定版本的软件兼容性...
3. **安全性强化**:JDK 1.6引入了更多安全特性,比如改进的证书管理,加强了对加密算法的支持,以及增强了网络通信的安全性。 4. **NIO.2 (New I/O)**:提供了新的文件系统API,支持异步I/O操作,提高了文件操作的...
这个jar包特别针对JDK1.6进行了优化和适配,确保在该版本的Java环境中能够正常运行。ZXing库广泛应用于移动设备和服务器端,允许程序生成和读取多种类型的条形码和二维码,如QR Code、Aztec、Code 39、EAN-13等。 1...
8. **国际化和本地化**:JDK 1.6在处理全球化和本地化方面做了很多改进,支持更多的语言和地区设置。 9. **Java Web Start和Applet的增强**:提高了Java Web Start应用程序和Applet的启动速度,同时增强了安全性和...
它在2006年发布,引入了许多新特性,包括改进的垃圾回收算法、更好的性能优化、增强的Swing组件、新的XML处理API(如JAXB 2.0)以及对JavaScript的支持(通过 Rhino 引擎)。对于开发者来说,JDK1.6提供了一个稳定的...
标题中的“jdk1.5 jdk1.6 反编译 工具”指的是用于对Java字节码进行反编译的软件,这类工具能够将Java的.class文件转换回可读的.java源代码形式,这对于理解和学习已有的Java类库或者进行逆向工程非常有帮助。...
在资源文件中的`解决JDK1.6下的Base64.jar`可能是包含了一个兼容JDK 1.6的Base64实现的第三方库,你可以直接将这个jar包添加到你的项目类路径中,这样就可以使用其中提供的Base64类而无需修改代码。添加方法通常包括...
这意味着它们并不被官方文档所支持,并且可能会随着JDK版本的升级而发生变化或者移除。因此,在JDK 1.6下使用这些类时可能会遇到兼容性问题,比如编译错误或者运行时异常等。 #### 解决方案 为了解决这个问题,可以...
提供的压缩包文件"解决JDK1.6下的Base64.txt"可能包含了如何集成和使用这些第三方库的详细步骤,或者可能是自定义的Base64实现。在实际应用中,你需要根据文件内容来调整你的项目配置。 总的来说,尽管JDK 1.6没有...
IBM JDK 1.6是IBM公司为Java开发者提供的一个针对Linux 64位操作系统的Java开发工具包。这个版本的JDK是Java平台标准版(Java SE)的一部分,主要用于开发和运行Java应用程序、Web应用程序以及企业级应用。IBM JDK与...
文件名列表中包含的关键词“session共享”、“支持tomcat6”和“jdk6.x”进一步强调了这个解决方案的主要目标是为Tomcat6和JDK1.6环境提供Redis支持的Session管理。这通常涉及到配置Redis服务器、安装和配置Tomcat ...