以下是我的情况:
我可以访问Java类中的Rhino Context对象。我想阅读一堆.js文件并将它们传递给Rhino上下文以对它们进行评估。我真的不想在脚本上下文中使用.js文件中的函数,因为我只是在.js文件中声明的变量可用(这是工具验证的一种问题)。
理想情况下,我会读入并尝试一次评估每个文件,而不是逐行评估。我注意到Context中有一个名为evaluateReader()
的方法(见Rhino API)。我的第一个猜测是我应该获取我想要加载的所有文件,仔细检查它们,然后调用这个方法为每个文件传递某种读者对象,很棒,现在它们都在我的脚本环境中。
所以,假设我在那里正确的轨道,任何人都可以告诉我在Java脚本环境中使用.js文件是否有任何好的做法,或者如果有更好的方法,或者你是否有其他方式,等等?
不在这里查找实现细节,只是来自其他人的反馈,这些反馈可能已经在他们的一些代码中完成了。使用Java编写脚本语言对我来说是新的。
答案 0 :(得分:12)
您是否知道Rhino ships in Java 6?
String javaScriptExpression = "sayHello(name);";
Reader javaScriptFile = new StringReader(
"function sayHello(name) {\n"
+ " println('Hello, '+name+'!');\n" + "}");
ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory
.getEngineByName("JavaScript");
ScriptContext context = engine.getContext();
context.setAttribute("name", "JavaScript",
ScriptContext.ENGINE_SCOPE);
engine.eval(javaScriptFile);
engine.eval(javaScriptExpression);
如果您想在Java 5中使用它,则必须单独download API。您可以从scripting.dev.java.net获取许多流行脚本语言的引擎。