Java Scripting API允許我們將參數(shù)從Java應(yīng)用程序傳遞到腳本引擎,反之亦然。
msg
是print()函數(shù)中使用的變量。
腳本不聲明 msg
變量。
我們可以通過(guò)幾種方式將參數(shù)傳遞給腳本引擎。
一種方法是使用腳本引擎的 put(String paramName,Object paramValue)
方法,它接受兩個(gè)參數(shù):
要將名為 msg
的參數(shù)傳遞給腳本引擎,請(qǐng)按如下所示調(diào)用put()方法:
engine.put("msg", "Hello from Java program");
以下代碼顯示了如何將參數(shù)從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(); } } }
上面的代碼生成以下結(jié)果。
將名為msg的參數(shù)傳遞給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對(duì)象的屬性和方法可以在腳本中訪(fǎng)問(wèn)。
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", "w3cschool.cn"); engine.eval(script); } }
上面的代碼生成以下結(jié)果。
腳本引擎可以將全局范圍變量傳遞給Java代碼。
ScriptEngine
的get(String variableName)
方法可以訪(fǎng)問(wèn)Java代碼中的這些變量。
它返回一個(gè)Java對(duì)象。
全局變量的聲明是與腳本語(yǔ)言相關(guān)的。
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); } }
上面的代碼生成以下結(jié)果。
更多建議: