`
Teok
  • 浏览: 148509 次
  • 性别: 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  
把一些核心业务逻辑用脚本实现,修改就不用重新编译了,某些场合用的。

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

相关推荐

    ASP某书店图书销售管理系统的设计与实现(源代码+论文)【ASP】.zip

    ASP某书店图书销售管理系统的设计与实现(源代码+论文)【ASP】

    施工混凝土配合比动态管理台账(新样板版).xls

    施工混凝土配合比动态管理台账(新样板版).xls

    Lua移植到标准ANSI C环境

    Lua移植到标准ANSI C环境

    施工混凝土配合比动态管理台账.docx

    施工混凝土配合比动态管理台账.docx

    TwinCAT3 入门教程 V4.11

    TwinCAT3 入门教程 V4.11

    基于Python开发的快递管理系统-课程设计

    【作品名称】:基于Python开发的快递管理系统-课程设计 【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【项目介绍】:使用Python开发的课程设计,快递管理系统。课程设计

    基于WEB的教师信息管理系统设计

    信息化以它自身的优点,方便、快捷、进入了各行各业。教育行业也是如此。由于高校不断的扩大管理,教师人工管理已经越来越不能满足学校的需求。人工管理信息,管理纸质档案变成了落后的管理方式。不方便、难以保存、不容易查找这些种种缺点都督促着高校信息化的发展。高校对于教师工作采用信息管理系统是急需的。 本文从相关技术分析、系统需求分析、数据库需求分析确定了系统重要功能模块的实现。实现主要功能模块包括人员信息模块、评价教师模块、教师工作日程管理模块、科研信息申报模块等。 在Windows环境下,本管理信息系统使用visual studio开发工具。编写程序过程用到了Asp.Net技术。编写程序采用B/S架构,webform框架,连接数据库方式采用当下主流技术使用SQL Server。最后,通过多次反复的测试,确定各项功能实现的稳定性。

    H3C实验概述及应用.pdf

    H3C实验概述及应用 一、实验概述 H3C实验是网络工程领域中的一项重要实践活动,旨在通过模拟或实际部署H3C网络设备,让学生或网络工程师深入了解H3C网络设备的配置、管理及应用。这些实验不仅有助于提升网络工程师的技术水平,还能够为企业的网络建设和管理提供有力支持。 H3C实验通常包括以下几个方面: 1.设备连接与基础配置:学习如何正确连接H3C网络设备,并进行基本的配置,如IP地址设置、VLAN划分等。 2.路由与交换技术:掌握H3C路由器和交换机的配置与管理,包括静态路由、动态路由协议(如OSPF、BGP等)、VLAN间路由等。 3.安全技术:了解H3C网络安全设备的配置与管理,如防火墙、VPN、入侵检测与防御等。 4.无线技术:熟悉H3C无线接入点(AP)和无线控制器的配置与管理,掌握WLAN网络的规划与部署。 5.网络管理与优化:学习使用H3C网络管理系统(如iMC)对网络设备进行监控、故障排查和性能优化。 二、实验应用 H3C实验在网络工程领域具有广泛的应用,以下是一些具体的应用场景: 1.教育培训:H3C实验是网络工程专业学生的重要实践课程,通过实验操作,学生能够更好地理解

    整站程序三雷11种语言建站系统(网络版) v6.0-30tnetwork

    php-[整站程序]三雷11种语言建站系统(网络版) v6.0_30tnetwork

    VBA聚光灯效果工具箱.xlsm

    VBA聚光灯效果工具箱.xlsm 跟wps聚光灯差不多 可设置聚光灯0.5毫秒消失,可以自定义设置时间

    中国生物医药行业市场前景及投资研究报告

    中国生物医药行业市场前景及投资研究报告

    啊哈算法哈磊第四节再解炸弹人BFS算法(java)

    本资源深入解析了《啊哈算法》一书中的经典案例——第四节“再解炸弹人问题”,通过Java语言实现了BFS(广度优先搜索)算法的详细过程。本资源不仅涵盖了理论基础,详细阐述了BFS算法原理及其在解决“炸弹人”游戏策略中的应用,还提供了高质量的Java代码实现,每行代码均有详尽注释,便于读者理解和实践。无论是算法初学者想要掌握BFS算法精髓,还是有一定基础的开发者希望提升编程技巧,这份资料都能提供极大的帮助。立即下载,跟随教程一步步揭开“炸弹人”问题的面纱,提升你的算法思维与Java编程能力!

    开车不犯困100首MP3,之51-60,DJ.rar

    开车不犯困100首MP3,之51-60,DJ.rar

    【思维模型】查理·芒格推荐的100个思维模型.pptx

    【思维模型】查理·芒格推荐的100个思维模型.pptx

    Buffer of Thoughts: Thought-Augmented Reasoning with Large Langu

    Buffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Large Language ModelsBuffer of Thoughts: Thought-Augmented Reasoning with Lar

    跨国经营与管理第九章全球化企业的跨文化管理.pptx

    跨国经营与管理第九章全球化企业的跨文化管理.pptx

    苹果CMS高仿迅影网主题模板

    一款苹果CMS8X高仿迅影网主题模板,已测试,完美无错。苹果cmsV8版本,只有电脑端,不自适应手机端。模板只包含首页、列表、内容页、播放页。

    前端开发基础入门教程 JavaScript语言编程基础教程 第5章 JS实战 共16页.pptx

    【学习目标】: 图片幻灯 复杂的表单验证 瀑布流

    跨国经营与管理第十一章全球化企业营销管理.pptx

    跨国经营与管理第十一章全球化企业营销管理.pptx

    混凝土配合比试配砼计表.docx

    混凝土配合比试配砼计表.docx

Global site tag (gtag.js) - Google Analytics