`

JDK1.6中对脚本语言的支持

    博客分类:
  • java
阅读更多
package cn.itcast.js;

import java.io.File;
import java.io.FileNotFoundException;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;

/**
 * @author handw
 * @version 创建时间:2009-10-20 上午09:49:31
 * 类说明:JDK1.6加入了对Script(JSR223)的支持。这是一个脚本框架,提供了让脚本语言来访问Java内部的方法。你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本。这个脚本API允许你为脚本语言提供Java支持。另外,Web Scripting Framework允许脚本代码在任何的Servlet容器(例如Tomcat)中生成Web内容。
 * 
 */

public class JdkJs {

	/**
	 * @author handw
	 * @time 2009-10-20上午09:49:31
	 * @param args
	 * @throws Exception 
	 */
	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		//JdkJs.test1();
		//--------------------------
		ScriptEngineManager mgr = new ScriptEngineManager();     
    	ScriptEngine engine = mgr.getEngineByExtension("js"); 
    	//-------------------------------
    	 //JdkJs.testUsingJDKClasses(engine);
    	//--------------------------
    	JdkJs.testScriptInterface(engine);
	}
	/**
	 * 关于ScriptEngine和ScriptEngineManager的使用:
	 * 超做js首先需要ScriptEngine
	 * 在jdk中可以用3中方式获得:
	 * @author handw
	 * @throws ScriptException 
	 * @throws FileNotFoundException 
	 * @throws NoSuchMethodException 
	 * @time 2009-10-20上午09:51:06
	 */
    public static void test1() throws FileNotFoundException, ScriptException, NoSuchMethodException
    {
    	ScriptEngineManager mgr = new ScriptEngineManager();     
    	ScriptEngine engine = mgr.getEngineByExtension("js");  

//    	mgr.getEngineByExtension(String extension) //getEngineByExtension可用参数:js 
//    	mgr.getEngineByMimeType(String mimeType)   // getEngineByMimeType可用参数:application/javascript;application/ecmascript;text/javascript;text/ecmascript;
//    	mgr.getEngineByName(String shortName)      //getEngineByName可用参数:js;rhino;JavaScript;javascript;ECMAScript--js和javascript是它的扩展;
    	//具体解析js可以是加载js文件或者js 脚本字符串:
    	//例如夹在js文件:
    	String jsfile="";
    	//engine.eval(new FileReader(jsfile));  
    	//或者
    	String jsstring="";
    	//engine.eval(jsstring);
//    	解析js需要Invocable 类:首先ScriptEngine 记载js文件或者字符串(如上):
//    	 然后转化为Invocable 就可以用来执行我们的js函数:
//    	eg:
    	engine.eval("function test(){return 'this is test js in java'}");   
    	Invocable inv = (Invocable) engine;   
    	String value = String.valueOf(inv.invokeFunction("test"));
    	System.out.println(value);
    }
    
		/**
		 * 演示脚本语言如何使用JDK平台下的类,调用一个JDK平台的Swing窗口
		 * @param engine ScriptEngine实例
		 * @return void
		 * */	
	private 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 接口: 允许java平台调用脚本程序中的函数或方法
		Invocable inv = (Invocable) engine;
		// invokeFunction()中的第一个参数就是被调用的脚本程序中的函数,第二个参数是传递给被调用函数的参数;
		inv.invokeFunction("doSwing", "Scripting Swing");
	}
	
	/**
	 * 演示脚本语言如何实现Java的接口,启动线程来运行script提供的方法
	 *
	 * @param engine ScriptEngine实例
	 * @return void
	 * */	
	private 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();
	}
	/**
	 * 演示如何在Java中调用脚本语言的方法,通过JDK平台给script的方法中的形参赋值
	 *
	 * @param engine ScriptEngine实例
	 * @return void
	 * */		
	private static void testInvokeScriptMethod(ScriptEngine engine)	throws Exception {
		String script = "function helloFunction(name) { return 'Hello everybody,' + name;}";
		engine.eval(script);
		Invocable inv = (Invocable) engine;
		String res = (String) inv.invokeFunction("helloFunction", "Scripting");
		System.out.println("res:" + res);
	}
	/**
	 * 演示如何暴露Java对象为脚本语言的全局变量,同时演示将File实例赋给脚本语言,并通过脚本语言取得它的各种属性值
	 *
	 * @param engine ScriptEngine实例
	 * @return void
	 * */		
	private static void testScriptVariables(ScriptEngine engine)	throws ScriptException {
		File file = new File("test.txt");
		engine.put("f", file);
		engine.eval("println('Total Space:'+f.getTotalSpace())");
		engine.eval("println('Path:'+f.getPath())");
	}
}

 文章出处:http://sharong.iteye.com/blog/474476 

  感谢吃西红柿的人。

分享到:
评论
1 楼 topbox163 2010-05-01  
谢谢了。............

相关推荐

    jdk1.6压缩包,下载即用

    - **改进的脚本支持**:添加了对JavaScript和其他脚本语言的支持。 **3. 安装与配置** - **下载**:从Oracle官网或其他可信源下载JDK 1.6的安装文件,如"jdk1.6.exe"。 - **安装**:双击执行安装文件,按照向导步骤...

    JDK1.6百度云下载

    5. **脚本引擎支持**:通过`javax.script`包支持脚本语言的嵌入式执行,方便开发者编写混合Java和其他脚本语言的应用程序。 ### 三、JDK1.6的下载与安装 #### 下载方式 - **官方渠道**:通常推荐从Oracle官方网站...

    jdk1.6 解压版-windows

    - **JSR 292**:支持动态语言,引入了invokedynamic指令,使得Java平台更适合脚本语言。 总的来说,JDK1.6是Java开发的重要里程碑,虽然现在已经有了更新的版本,但对于某些老项目或者特定环境,JDK1.6仍然是必要的...

    JDK 1.6中文文档

    7. **Scripting API**:通过`javax.script`包,Java 1.6开始支持脚本语言,如JavaScript,Rhino等,增强了Java的脚本引擎支持。 8. **改进的JMX(Java Management Extensions)**:提供了一套用于管理系统资源的...

    jdk1.6的文件

    7. **Scripting API**:JDK1.6引入了JSR 223,即脚本引擎API,允许开发者在Java程序中嵌入并执行JavaScript和其他脚本语言。 8. **XML处理**:JAXB(Java Architecture for XML Binding)和StAX(Streaming API for...

    JAVA JDK1.6 API中文帮助文档

    6. **脚本引擎支持**:JDK1.6开始支持JavaScript和其他脚本语言,通过JSR 223规范,可以在Java程序中嵌入和执行脚本代码。 7. **改进的垃圾收集器**:包括并行GC、CMS(Concurrent Mark Sweep)和G1(Garbage-First...

    jdk1.6_green_32bit

    6. **Scripting API**:JSR 223引入了脚本引擎支持,允许在Java应用中执行JavaScript和其他脚本语言。 7. **改进的日志框架**:JDK 1.6的日志API进行了改进,提供了更强大的日志处理能力,可以方便地配置和管理日志...

    jdk1.6(备用).zip

    7. **增强的脚本引擎**:JDK 1.6添加了对JavaScript(Rhino引擎)和其他脚本语言的支持,增强了Java平台的脚本编程能力。 8. **安全增强**:包括证书链验证的改进,增强了网络和应用程序的安全性。 9. **JMX (Java...

    jdk1.6源代码

    6. **改进的内存管理**:JVM在1.6版本中对垃圾收集进行了优化,如使用CMS(Concurrent Mark Sweep)收集器,减少了STW(Stop-the-World)时间,提升了应用响应速度。 7. **国际化改进**:增强了对多种语言和地区的...

    jdk 1.6 windows官方资源

    - **动态语言支持**:JDK 1.6开始引入JSR 223(Scripting for the Java Platform),允许Java程序直接调用脚本语言,增强了Java的灵活性。 - **JDBC增强**:JDBC 4.0引入了自动连接管理和新的数据库元数据API,简化...

    jdk1.6windows-x64

    2. 动态语言支持:通过JSR 223,JDK 1.6增加了对动态语言的支持,允许Java平台更方便地运行脚本语言。 3. JAXB 2.1:提供了XML到Java对象的绑定,简化了XML处理。 4. NIO.2:引入了新的文件系统API,提供了异步I/O...

    jdk1.6-bin.zip

    这个压缩包文件"jdk1.6-bin.zip"包含了JDK 1.6版本的二进制文件,适用于Linux操作系统,特别是64位系统。JDK 1.6,也被称为Java SE(标准版)6,发布于2006年,它在Java平台上具有里程碑式的意义,引入了许多新特性...

    jdk1.6压缩包,老版本的jdk

    9. **脚本引擎支持:** JDK 1.6开始支持内置的JavaScript引擎Rhino,允许在Java应用程序中直接执行JavaScript代码。 10. **Javadoc和源码可用:** JDK 1.6包含了Javadoc文档和源码,便于开发者理解和学习。 虽然...

    jdk1.6(32位&64;位)

    这一版本引入了许多新特性,如改进的动态代理、增强的Swing组件、新的脚本引擎支持以及对XML处理的优化。 在压缩包子文件的文件名称列表中,`jdk-6u43-windows-i586.exe`是32位版本的JDK安装程序,而`jdk-6u43-...

    JDK1.6 64位下载

    - **脚本语言支持**:通过JSR 223,JDK1.6支持了更多脚本语言,如JavaScript、Groovy等,可以在Java环境中执行。 总的来说,JDK1.6 64位是一个经典且稳定的选择,对于那些需要兼容旧系统的开发者来说,它是必不可少...

    jdk1.6 mac 64 zip

    9. **脚本语言支持**:JDK 1.6通过JSR 223引入了对脚本语言的支持,允许Java应用程序直接运行JavaScript等脚本语言。 10. **改进的调试工具**:JDK自带的Java Debug Interface (JDI) 和Java VisualVM等工具得到了...

    JDK1.6.0.45

    1. **动态语言支持**:JDK 1.6引入了JSR 223(Scripting for the Java Platform),使得在Java环境中可以方便地使用脚本语言,如JavaScript、Ruby等。 2. **改进的Swing组件**:Swing UI库得到增强,包括新的JTable...

    Java开发工具jdk1.6

    改进的动态语言支持使得Java可以更好地处理脚本语言,如JavaScript和Ruby。另外,JDBC(Java Database Connectivity)API也得到了升级,增强了数据库连接的性能和稳定性。 在安全性方面,JDK 1.6加强了对网络通信的...

    JDK 1.6 中文版.zip

    1. **动态语言支持**:JDK 1.6引入了JSR 223(Scripting for the Java Platform),为Java平台提供了对多种动态脚本语言的支持,如JavaScript、Ruby等。 2. **改进的Swing UI组件**:JDK 1.6更新了Swing组件,提供...

    jdk1.6 64.zip

    7. **脚本支持**:JDK 1.6添加了对脚本语言的支持,如JavaScript,通过JSR 223(Scripting for the Java Platform)实现。 8. **XML处理**:在`javax.xml`包下增加了一些新类,如`StAX` API,提供了更高效的XML解析...

Global site tag (gtag.js) - Google Analytics