10

这是我的情况:

我可以访问 Java 类中的 Rhino Context 对象。我想读入一堆 .js 文件并将它们传递给 Rhino 上下文以对其进行评估。我对让 .js 文件中的函数在脚本上下文中可用并不真正感兴趣,而只是让 .js 文件中声明的变量可用(这是一种工具验证问题)。

理想情况下,我会读入并尝试一次评估每个文件,而不是逐行评估。我注意到 Context 中有一个方法(参见Rhino API),称为evaluateReader(). 我的第一个猜测是我应该得到所有我想要加载的文件,遍历它们,然后调用这个方法,为每个文件传入某种阅读器对象,太好了,现在它们都在我的脚本上下文中。

所以,假设我在正确的轨道上,谁能告诉我在 Java 脚本上下文中使用 .js 文件是否有任何好的做法可以遵循,或者是否有更好的方法,或者你做了一些其他方式等?

不是在这里寻找实现细节,只是来自其他人的反馈,这些人可能已经在他们的一些代码中做到了这一点。使用 Java 的脚本语言对我来说是新事物。

4

1 回答 1

13

你知道Rhino 是在 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 中使用它,则必须单独下载API。您可以从scripting.dev.java.net获得许多流行脚本语言的引擎。

于 2009-05-19T07:26:42.147 回答