友情提示
本文主要参考了51CTO上的一篇文章,代码经过自己的模仿和整理,还算凑合。
本文中的代码注释比较多,不再过多解释。
更多用法,还是得看JDK的API或者看原文http://developer.51cto.com/art/201007/208812.htm。
1.可用的脚本引擎
/**
* Java内置只支持JavaScript一种脚本
* 打印Script引擎的一些信息
*/
public static void printBuildInScriptEngine() {
ScriptEngineManager manager = new ScriptEngineManager();
List<ScriptEngineFactory> factories = manager.getEngineFactories();
for (ScriptEngineFactory factory : factories) {
println("engine name:" + factory.getEngineName());
println("engine version:" + factory.getEngineVersion());
println("language name:" + factory.getLanguageName());
println("language version:" + factory.getLanguageVersion());
println("names:" + factory.getNames());
println("mime:" + factory.getMimeTypes());
println("extension:" + factory.getExtensions());
}
}
2.一个“HelloWorld”程序
/**
* 在Java中使用JavaScript的Hello world示例
*/
public static void printHelloWorld() {
ScriptEngine engine = getJavaScriptEngine();
String helloWorldScript = "print('hello script')";
try {
engine.eval(helloWorldScript);
} catch (ScriptException e) {
e.printStackTrace();
}
println();
}
3.方法调用-第1种方式
/**
* 可以向脚本中传递变量,使得Java代码可以和脚本代码交互
*/
public static void invokeFunction() {
ScriptEngine engine = getJavaScriptEngine();
engine.put("a", 13);
engine.put("b", 24);
try {
String maxFunction = JS_MAX_FUNCTION_AND_INVOKE;
Object maxNum = engine.eval(maxFunction);
println("max:" + maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
4.方法调用-第2种方式
/**
* 方法调用,第2种方式
*/
public static void invokeFunction2() {
ScriptEngine engine = getJavaScriptEngine();
try {
engine.eval(JS_MAX_FUNCTION);
Invocable invoke = (Invocable) engine;
Object maxNum = invoke.invokeFunction(MAX_FUNCTION_NAME, 88, 99);
println(maxNum);
maxNum = invoke.invokeFunction(MAX_FUNCTION_NAME, 99, 111);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
5.方法调用-第3种方式
/**
* 方法调用第3种方式
*/
public static void invokeFunction3() {
ScriptEngine engine = getJavaScriptEngine();
try {
engine.eval(JS_MAX_FUNCTION);
Invocable invoke = (Invocable) engine;
JSLib jslib = invoke.getInterface(JSLib.class);
int maxNum = jslib.max(2013, 1989);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
6.在JavaScript中使用Java对象和方法
/**
* 在JavaScript中使用Java对象和方法
*/
public static void useJavaObject() {
ScriptEngine engine = getJavaScriptEngine();
try {
String script = "var list = java.util.ArrayList();list.add('CSDN FanUnion');print(list.get(0));";
engine.eval(script);
} catch (Exception e) {
e.printStackTrace();
}
}
7.编译JS代码,然后执行
/**
* 编译JS代码,然后执行
*/
public static void compileExecute() {
ScriptEngine engine = getJavaScriptEngine();
try {
Compilable compEngine = (Compilable) engine;
CompiledScript script = compEngine.compile(JS_MAX_FUNCTION);
script.eval();
//强制转换,Invocable和Compilable都是脚本引擎可选实现的
//如果这个地方的脚本引擎没有实现这个接口,应该会报错
Invocable invoke = (Invocable) engine;
Object maxNum = invoke
.invokeFunction(MAX_FUNCTION_NAME, 2020, 2050);
println(maxNum);
} catch (Exception e) {
e.printStackTrace();
}
}
8.工具方法和接口
/**
* 工具方法:创建JS-引擎
*/
private static ScriptEngine getJavaScriptEngine() {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName(JS_ENGINE_NAME);
return engine;
}
public static void println() {
System.out.println();
}
public static void println(Object str) {
System.out.println(str);
}
/**
* 定义了求最大值的一个接口
*/
interface JSLib {
public int max(int a, int b);
}
下载地址:本文已经给出了所有的源代码了。建议自己写一遍,不懂的参考API。
CSDN下载频道有源码,需要1分。(有兴趣的自己花1分,下载吧)
(上传资源,迟迟不出来,晚点再给出下载地址)
http://download.csdn.net/detail/fansunion/6821829
原文链接:http://blog.fansunion.cn/articles/2839(小雷博客-blog.fansunion.cn)
分享到:
相关推荐
* 在Java中使用脚本语言JavaScript。 * * @author LeiWen@FansUnion.cn,http://FansUnion.cn, * http://blog.csdn.net/FansUnion * * QQ:240370818 参考资料:...
java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包, java openJDK 源码, Hotspot, 未编译, 原始代码, 直接zip压缩包
基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-OpenJDK Java开发环境.zip 基于java的开发源码-...
安装包:java-7-openjdk-amd64.tar.gz 使用方法 1. 拷贝至服务器/个人电脑 2. 解包 mkdir /opt/jdk/ tar -zxvf java-7-openjdk-amd64.tar.gz -C /opt/jdk/ 3. 配置编译环境 JAVA_HOME=/opt/jdk/java-7-openjdk-amd...
openjdk源码1
openjdk jdk源码,在研究JAVA本地方法源码时,这个是必须的。
java虚拟机 源码 openjdk7 openjdk7源码(深入理解java虚拟机,读书笔记) 官方源码下载来自:
openjdk hotspot源码,在研究JAVA虚拟机时,这个源码是必不可少的。
OpenJdk源码包,
从前面介绍的Java发展史中我们了解到OpenJDK是Sun在2006年末把Java开源而形成的项目,这里的“开源”是通常意义上的源码开放形式,即源码是可被复用的,例如IcedTea、UltraViolet都是从OpenJDK源码衍生出的发行版。...
openjdk8源码,适合深入学习jdk源码的同学
自己准备的JAVA8 完整源码(包含Sun包源码),120M大小的,jdk自带src.zip大小为20M,包括sum.misc.*包内的源码。这个用7z打包后13.3M大小。 源码源自:https://github.com/openjdk-mirror/jdk.git的jdk8u/jdk8u/...
基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36.zip 基于java的开发源码-OpenJDK Java开发环境 v16.36....
openjdk-17源码(openjdk-17+35_src.zip)
Ubuntu 下 openjdk 6 源码
OpenJDK源代码,便于程序员筒子们深入研究JDK运行机制
前几天看完了深入理解 Java 虚拟机-JVM 高级特性与最佳实践(第2版) 这本书突发奇想想研究一下jdk的源码,所以在csdn上把自己的搭建过程记录一下,避免下次踩坑(虽然我也看不懂 卑微 有需要的小伙伴可以加我QQ:...
openjdk8 源码,openjdk8 源码,openjdk8 源码,openjdk8 源码
openjdk1.8 源码查看
openjdk7 的源码 百度云下载链接 方便国内用户使用