jdk1.6中对scripting的支持
来源:互联网 发布:tcl通讯宁波知乎 编辑:程序博客网 时间:2024/05/17 22:45
jdk1.6中对scripting的支持
JDK1.6新增java脚本支持,为各种动态语言编写的程序,提供了一种统一的方式,你可以在运行java代码的时候调用脚本。JavaSE6中实现了JSR223。这是一个脚本框架,提供了让脚本语言来访问Java内部的方法。你可以在运行的时候找到脚本引擎,然后调用这个引擎去执行脚本。这个脚本API允许你为脚本语言提供Java支持。另外,Web ScriptingFramework允许脚本代码在任何的Servlet容器(例如Tomcat)中生成Web内容。
关于java脚本的API,在这里我就不多介绍了。下面请看一下java代码:
package scripting;
import java.io.InputStream;
import java.io.InputStreamReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class ScriptEngineManagerTest {
/**
* @param args
*/
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
//ScriptEngine 来运行脚本文件
ScriptEngine engine = manager.getEngineByName("javascript");
try {
InputStream is = ScriptEngineManagerTest.class .getResourceAsStream("ScriptEngine.js");
//engine put 与setjavax.script.Bindings检索与保存关键字
engine.put(ScriptEngine.NAME, "ScriptEngine.js");
//执行脚本
engine.eval(new InputStreamReader(is));
//运行脚本里面的方法InvocableScriptEngines 实现的可选接口,该 ScriptEngines 的方法允许在以前执行过的脚本中调用程序
((Invocable) engine).invokeMethod(engine.get("obj"), "show", "xukeping");
} catch (Exception e) {
e.printStackTrace();
}
}
}
执行结果如下:
hello word....
你的姓名kpxu
hello word....xukeping
如果运行出现错误:
java.lang.NullPointerException
at java.io.Reader.<init>(Reader.java:61)
at java.io.InputStreamReader.<init>(InputStreamReader.java:55)
则 InputStream is = ScriptEngineManagerTest.class .getResourceAsStream("ScriptEngine.js");
程序读取ScriptEngine.js文件出现错误,必须要有ScriptEngine.js文件
测试javascript代码如下:
//定义空间,模拟于java包的概念'
var space = {};
var out = java.lang.System.out;
space.person = {
"name" : "kpxu",
"show" : function(name) {
out.println("hello word...." + name);
}
}
var obj = space.person;
obj.show("");
out.println("你的姓名"+space.person.name);
不过在运行当中还是觉得scripting有点小bug,下面将我们将java代码修改成
public static void main(String[] args) {
ScriptEngineManager manager = new ScriptEngineManager();
//ScriptEngine 来运行脚本文件
ScriptEngine engine = manager.getEngineByName("javascript");
try {
InputStream is = ScriptEngineManagerTest.class .getResourceAsStream("ScriptEngine.js");
//engine put 与setjavax.script.Bindings检索与保存关键字
engine.put(ScriptEngine.NAME, "ScriptEngine.js");
//执行脚本返回的值
engine.eval(new InputStreamReader(is));
//运行脚本里面的方法
((Invocable) engine).invokeMethod(engine.get("space.person"), "show","xukeping");
} catch (Exception e) {
e.printStackTrace();
}
}
将会出现如下异常:
java.lang.IllegalArgumentException: script object can not be null
at com.sun.script.javascript.RhinoScriptEngine.invokeMethod(RhinoScriptEngine.java:148)
at scripting.ScriptEngineManagerTest.main(ScriptEngineManagerTest.java:26);
jdk1.6不支持javascript空间命名方式,只能以var obj = space.person;获取空间里面的对象,才能调用obj对象里面的函数.对使用javascript面向对象访问支持不是很好
- jdk1.6中对scripting的支持
- JDK1.6中对脚本语言的支持
- jdk1.6对webservice的支持示例
- jdk1.6对webservice的支持示例
- jdk1.6对webservice的支持示例 .
- JDK1.6对脚本语言的支持(Mozilla Rhino)
- jdk1.5和jdk1.6对于@override支持的区别
- JDK6的新特性:脚本语言支持(Scripting)
- 在自己的程序中加入脚本支持 —— ActiveX Scripting技术
- JDK1.6 Java Scripting Programmer's Guide 翻译
- jdk1.8对ODBC不提供支持
- JDK1.5中对XML的简单操作
- 我的项目中jdk1.5跟jdk1.6区别
- jdk1.6和jdk1.7中substring的区别
- loadrunner11最高支持jdk1.6
- java jdk1.6内置支持的webservice使用示例
- java jdk1.6内置支持的webservice使用示例
- java jdk1.6内置支持的webservice使用示例
- hook入门[网络整理]
- 23种设计模式
- QQ , MSN 客服代码
- 分水岭算法的概念及原理
- 关于getc的实验
- jdk1.6中对scripting的支持
- 【转】 明明白白Unsupported major.minor version 49.0的错误
- Java精典面试题推荐二
- 马云:未来的创新要靠80后、90后
- symbian 用doxygen生成交叉引用文档
- symbian 生成help帮助文档
- flex 国际化
- Java Persistence API、Hibernate、Toplink、Entity Enterprise Java bean之间的优缺点
- 对过去的22年说bye bye.