Java Scripting API允许我们将参数从Java应用程序传递到脚本引擎,反之亦然。
msg
是print()函数中使用的变量。
脚本不声明 msg
变量。
我们可以通过几种方式将参数传递给脚本引擎。
一种方法是使用脚本引擎的 put(String paramName,Object paramValue)
方法,它接受两个参数:
要将名为 msg
的参数传递给脚本引擎,请按如下所示调用put()方法:
engine.put("msg", "Hello from Java program");
以下代码显示了如何将参数从Java程序传递到脚本。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Main {
public static void main(String[] args) {
// Get the Nashorn engine
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String script = "print(msg)";
try {
engine.put("msg", "Hello from Java program");
engine.eval(script);
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
上面的代码生成以下结果。
将名为msg的参数传递给JRuby中的脚本。
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("jruby");
String script = "puts($msg)";
engine.put("msg", "Hello from Java");
// Execute the script
engine.eval(script);
传递给脚本的Java对象的属性和方法可以在脚本中访问。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Main {
public static void main(String[] args) throws Exception{
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String script = "print(msg.toUpperCase());print(msg.indexOf("a"))";
engine.put("msg", "lmonkey.com");
engine.eval(script);
}
}
上面的代码生成以下结果。
脚本引擎可以将全局范围变量传递给Java代码。
ScriptEngine
的get(String variableName)
方法可以访问Java代码中的这些变量。
它返回一个Java对象。
全局变量的声明是与脚本语言相关的。
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public class Main {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
String script = "var year = 2015";
engine.eval(script);
Object year = engine.get("year");
System.out.println("year"s class:" + year.getClass().getName());
System.out.println("year"s value:" + year);
}
}
上面的代码生成以下结果。
© 著作权归作者所有