`
Teok
  • 浏览: 150196 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jdk1.6 Scripting是做什么用的?

阅读更多
   我在jdk1.6中看到一个用在js文件中夹杂java类的demo,我也照着这个demo自己写了一个这样的js,结果的确可以执行。请问各位,这种技术有什么用呢?
测试类代码:
package com.ns.test;

import java.io.InputStream;
import java.io.InputStreamReader;

import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;

/**
 *	{@link ScriptEngineManager} 类和 {@link ScriptEngine} 
 *	使得用java来执行脚本语言成为可能
 *	这个测试类演示了一些简单操作
 */
class TestScriptEngine {
	public static void main(String[] args){
		ScriptEngineManager manager = new ScriptEngineManager();
		ScriptEngine engine = manager.getEngineByName("js");
		
		engine.put("engine", engine);
		
		try {
			eval(engine, "conc.js");
			eval(engine, "TestScriptEngine.js");
			
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	 private static void eval(ScriptEngine engine, String name)
     throws Exception {
	/*
	* This class is compiled into a jar file. The jar file
	* contains few scripts under /resources URL.
	*/
	InputStream is = TestScriptEngine.class.getResourceAsStream(name);
	// current script file name for better error messages
	engine.put(ScriptEngine.NAME, name);
	// evaluate the script in the InputStream
	engine.eval(new InputStreamReader(is));
	}
}

我写的测试TestScriptEngine.js:
var out = java.lang.System.out;
out.println("abc");
var str = java.lang.String;
str = ["abc","def","ghi"];
for(var i=0;i<str.length;i++){
	out.println(str[i]);
}
for(var s in str){
	out.println(s)
}

执行结果为:
abc
abc
def
ghi
0
1
2

附件中包含有TestScriptEngine.js和jdk demo中提供的conic.js(这个js中重写了很多java.lang.object的成员方法).
分享到:
评论
12 楼 lnaigg 2009-09-20  
我相信脚本引擎以后会有发展的
11 楼 wyyl00 2009-09-19  
JAVA和JS混合执行,有个叫rhino的引擎
10 楼 liang1022 2009-09-18  
var conStr = "sun.jdbc.odbc.JdbcOdbcDriver";
var claz = java.lang.Class;
claz.forName(conStr);

var conn = java.sql.Connection;
conn = java.sql.DriverManager.getConnection("jdbc:odbc:trans");
var out = java.lang.System.out
if(conn!=null)
out.println("database has been connected..")
conn.close();
=================
感謝,Teok的指教,JDBC的使用OK
9 楼 Teok 2009-09-18  
liang1022 写道

D:\java>java com.ns.test.TestScriptEngine
java.lang.NullPointerException
        at java.io.Reader.<init>(Unknown Source)
        at java.io.InputStreamReader.<init>(Unknown Source)
        at com.ns.test.TestScriptEngine.eval(TestScriptEngine.java:40)
        at com.ns.test.TestScriptEngine.main(TestScriptEngine.java:22)

D:\java>
測試了這支程式,報行時出現error 請問這是什麼錯呢


命令行执行的方式我不是很熟悉,我比较依赖ide。

你注意一下eval方法的定义,以及堆栈轨迹信息:
java.lang.NullPointerException
at java.io.Reader.<init>(Unknown Source)
at java.io.InputStreamReader.<init>(Unknown Source
所以,你应该是没有给getResourceAsStream方法传递正确的js路径(在附件中有2个js文件,关于数据库连接的那个则在上边回帖可以看见源码),而导致InputStreamReader初始化错误。
例如:InputStream is = TestScriptEngine.class.getResourceAsStream("/resource/" + name);
8 楼 liang1022 2009-09-18  

D:\java>java com.ns.test.TestScriptEngine
java.lang.NullPointerException
        at java.io.Reader.<init>(Unknown Source)
        at java.io.InputStreamReader.<init>(Unknown Source)
        at com.ns.test.TestScriptEngine.eval(TestScriptEngine.java:40)
        at com.ns.test.TestScriptEngine.main(TestScriptEngine.java:22)

D:\java>
測試了這支程式,報行時出現error 請問這是什麼錯呢
7 楼 Teok 2009-09-18  
liang1022 写道
請問一下JDBC的存取可以寫在腳本裏嗎?
例如:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection conn=DriverManager.getConnection("jdbc:derby:数据库名;create=true");

当然可以:
引用

var conStr = "oracle.jdbc.driver.OracleDriver";
var url = "jdbc:oracle:thin:@192.168.1.250:1521:orcl";
var claz = java.lang.Class;
claz.forName(conStr);
var conn = java.sql.Connection;
conn = java.sql.DriverManager.getConnection(url,"train","123456");
var out = java.lang.System.out
if(conn!=null)
out.println("database has been connected..")
conn.close();


按照官方的介绍,这项技术是为java与动态语言之间建立一个桥梁,让java可以去调用这些语言。至于sql脚本,现在的技术足够用,估计也不会去支持:官方暂时没有给出相应的时间。
另外,如developerworks上的那2篇文章所示,动态的添加业务组件,可能是它的最大用途。仅此而已吗?我就不知道了 

6 楼 liang1022 2009-09-16  
請問一下JDBC的存取可以寫在腳本裏嗎?
例如:
Class.forName("org.apache.derby.jdbc.EmbeddedDriver"); Connection conn=DriverManager.getConnection("jdbc:derby:数据库名;create=true");
5 楼 Teok 2009-09-16  
mallon 写道
这个地方有详细介绍:

http://www.ibm.com/developerworks/cn/java/j-javascripting1/
http://www.ibm.com/developerworks/cn/java/j-javascripting2/


看完这两篇文章,感觉很high。。似乎看到了“动态”的希望,总比修改个xml、property就得重启来的方便。当然了,作者提供的是动态添加业务的例子。
我有个意向天开的想法:可不可以给spring与xml之间加一层这样的engine,那样,我们就不用改xml就需要重启了,而是让engine去读取,然后再给spring之类的呢?
因为经常启动公司的项目花费个9w多ms很正常,这样的时间上个厕所都够了。。:)
4 楼 Teok 2009-09-16  
grandboy 写道
像LoadRunner一样的脚本功能应该就是这样的做法。

但是不知道他究竟支持哪些脚本? 脚本引擎不知道能不能或者扩展?


java scripting项目现在实现20多种脚本引擎,参见:https://scripting.dev.java.net/。包括很多在国内很少听到的脚本语言。
我想它应该支持脚本,这个项目的意义应该在于:构件java与脚本语言之间的桥梁,正如mallon给出的那两篇文章中所说:
引用
……
今年,1.0 版本的 JRuby 和 Groovy 的发行引领了一场热潮,促使人们纷纷在自己的 Java 应用程序中添加动态语言。
……
Java SE 6 中添加的 javax.script 包使集成动态语言更加容易。通过使用一小组接口和具体类,这个包使我们能够简单地调用多种脚本语言。但是,Java 脚本 API 的功能不只是在应用程序中编写脚本;这个脚本包使我们能够在运行时读取和调用外部脚本,这意味着我们可以动态地修改这些脚本从而更改运行应用程序的行为。

我个人觉得这个项目还是很意义的,让编程充满乐趣本身就很有意义啊,何况其作用不仅仅于此。
3 楼 mallon 2009-09-16  
这个地方有详细介绍:

http://www.ibm.com/developerworks/cn/java/j-javascripting1/
http://www.ibm.com/developerworks/cn/java/j-javascripting2/
2 楼 grandboy 2009-09-15  
像LoadRunner一样的脚本功能应该就是这样的做法。

但是不知道他究竟支持哪些脚本? 脚本引擎不知道能不能或者扩展?
1 楼 mallon 2009-09-15  
把一些核心业务逻辑用脚本实现,修改就不用重新编译了,某些场合用的。

举一个类似的例子:很多游戏引擎都带有脚本功能的

相关推荐

    jdk1.6_64位官方下载

    在本场景中,我们讨论的是"jdk1.6_64位官方下载",这意味着我们要获取适用于64位Windows操作系统的JDK 1.6版本。 **JDK 1.6的主要特点:** 1. **增强的性能**:JDK 1.6通过改进垃圾收集器和JIT编译器提高了运行...

    jdk1.6的文件

    1. **兼容性与稳定性**:JDK1.6在兼容性和稳定性方面做得相当好,支持多种操作系统平台,如Windows、Linux和Mac OS X。这个版本对之前API的改进确保了代码在不同平台上的稳定运行。 2. **增强的Swing组件**:JDK1.6...

    jdk 1.6 windows官方资源

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

    jdk1.6源代码

    JDK 1.6,又称为JDK 6,是Java开发工具包的一个重要版本,由Sun Microsystems(后被Oracle收购)在2006年发布。这个版本引入了许多新特性,优化和改进,旨在提升开发者体验和应用程序性能。源代码的提供对于学习Java...

    JDK1.6.0.45

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

    JDK 1.6中文文档

    这份“JDK 1.6中文文档”是开发者在使用JDK 1.6时的重要参考资料,它以中文形式详细解读了Java 1.6的所有核心特性和接口。 **一、Java SE 1.6的关键特性** 1. **增强的枚举类型**:在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

    标题中的"jdk1.6 64.zip"指的是64位版本的JDK 1.6,这个版本的JDK在当时是一个广泛使用的开发环境,尤其对于那些需要处理大量数据或利用大型内存的应用程序来说,64位版本能够提供更大的内存地址空间。 JDK 1.6,也...

    jdk1.6_64-bit

    对于Android开发而言,虽然现在推荐使用更新的JDK版本,但JDK 1.6在早期的Android项目中是常用的,因为那时的Android SDK支持较低的Java版本。 JDK 1.6引入了一些重要的特性,例如: 1. **泛型**:泛型允许开发者...

    jdk1.6 windows64位安装包

    **Java Development Kit (JDK) 1.6 for Windows 64位** JDK(Java Development Kit)是Oracle公司提供的用于开发和运行Java应用...尽管现在已经有了更新的JDK版本,但JDK 1.6仍然在某些旧项目或特定环境下被广泛使用。

    jdk1.6安装包

    2. 动态语言支持:JDK 1.6引入了JSR 223(Scripting for the Java Platform),使得在Java环境中支持其他动态语言成为可能,如JavaScript、Groovy等。 3. 轻量级UI框架:Swing组件在1.6版本中得到了大量增强,提供...

    jdk1.6安装文件-64位

    JDK 1.6,也称为Java SE 6,是Oracle公司发布的一个早期版本,主要面向Windows操作系统。在这个版本中,Java引入了许多新特性和改进,旨在提高开发者的生产力和应用程序的性能。 首先,让我们详细了解一下JDK 1.6的...

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

    8. **Java运行时诊断工具**:JDK1.6提供了一套强大的诊断工具,如`jconsole`、`jmap`、`jhat`等,帮助开发者监控和分析Java应用的性能和内存使用情况。 9. **Web服务支持**:Java 6支持JAX-WS 2.0,提供了更简单的...

    jdk1.6_green_32bit

    本资源"jdk1.6_green_32bit"是一个针对32位操作系统的绿色版JDK,无需安装即可使用,这在某些场景下非常方便,比如在没有管理员权限或者希望快速部署的环境中。 JDK 1.6,也被称为Java SE(标准版)6,是Oracle公司...

    jdk1.6-64位

    需要注意的是,随着技术的发展,JDK 1.6已经是一个较为过时的版本,不再接受安全更新,因此在生产环境中使用可能存在安全隐患。如果可能,建议升级到更现代的版本,例如JDK 8或更高版本,以获得最新的特性和安全性...

    jdk1.6资源下载

    JDK 1.6是Oracle公司发布的一个早期版本,正式名称为Java SE 6(Java Standard Edition 6)。在Java社区中,"1.6"通常被用来指代这个版本,尽管后来的版本命名规则已经改为使用全数字(如Java 8, Java 11等)。 ...

    JDK1.6、JDK6下载

    JDK1.6,也称为JDK 6,是Java平台的一个重要版本,它在2006年12月首次发布,是Java SE(标准版)的一部分。这个版本引入了许多新特性、性能改进和错误修复,旨在提升开发效率和应用程序性能。 一、JDK1.6的主要特性...

    JDK 1.6 32位

    JDK 1.6开始支持JSR 223(Scripting for the Java Platform),允许Java程序直接调用JavaScript和其他脚本语言,增强了Java作为多语言平台的能力。 #### 1.3 新的Swing组件与UI改进 Swing库在JDK 1.6中得到增强,...

    ibmjdk1.6版本

    这个特定的版本,即“ibmjdk1.6”,是针对Windows操作系统设计的。在Java的历史发展中,1.6版本,也被称为Java SE 6或Java 6,是一个重要的里程碑,它在2006年发布,提供了许多新特性和改进,以增强开发者的工作效率...

    JDK1.6(JavaSE1.6/JDK6)

    JDK1.6之后的版本,如JDK7和JDK8,都引入了更多新特性和优化,但JDK1.6作为Java发展历程中的一环,它的特性和改进为后来的版本奠定了坚实的基础。如果你是Java开发者,了解这些知识将有助于你更好地理解Java平台的...

Global site tag (gtag.js) - Google Analytics