package com.wawmg.js;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class HelloScriptingWorld {
public static void main(String[] args) throws ScriptException,
NoSuchMethodException {
ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript");
if (jsEngine == null) {
System.err.println("No script engine found for JavaScript");
System.exit(1);
}
//用script引擎执行js代码
System.out.println("Calling invokeHelloScript...");
invokeHelloScript(jsEngine);
//用script引擎定义js函数
System.out.println("\nCalling defineScriptFunction...");
defineScriptFunction(jsEngine);
//用script引擎调用已经定义的js函数
System.out.println("\nCalling invokeScriptFunctionFromEngine...");
invokeScriptFunctionFromEngine(jsEngine);
//使用java接口调用js函数
System.out.println("\nCalling invokeScriptFunctionFromJava...");
invokeScriptFunctionFromJava(jsEngine);
//script引擎中put java实例,在script中通过java实例调用java方法
System.out.println("\nCalling invokeJavaFromScriptFunction...");
invokeJavaFromScriptFunction(jsEngine);
}
private static void invokeHelloScript(ScriptEngine jsEngine)
throws ScriptException {
jsEngine.eval("println('Hello from JavaScript')");
}
private static void defineScriptFunction(ScriptEngine engine)
throws ScriptException {
// Define a function in the script engine
engine.eval("function sayHello(name) {" + " println('Hello, ' + name)"
+ "}");
}
private static void invokeScriptFunctionFromEngine(ScriptEngine engine)
throws ScriptException {
engine.eval("sayHello('World!')");
}
private static void invokeScriptFunctionFromJava(ScriptEngine engine)
throws ScriptException, NoSuchMethodException {
Invocable invocableEngine = (Invocable) engine;
invocableEngine.invokeFunction("sayHello", "from Java");
}
private static void invokeJavaFromScriptFunction(ScriptEngine engine)
throws ScriptException {
engine.put("helloScriptingWorld", new HelloScriptingWorld());
engine.eval("println('Invoking getHelloReply method from JavaScript...');"
+"var msg = helloScriptingWorld.getHelloReply('JavaScript');"
+ "println('Java returned: ' + msg)");
}
/** Method invoked from the above script to return a string. */
public String getHelloReply(String name) {
return "Java method getHelloReply says, 'Hello, " + name + "'";
}
}