【发布时间】:2010-01-14 17:24:09
【问题描述】:
如何使用java获取位于web服务器上的js文件,然后执行js文件中的函数,得到结果并在java中使用。
你们能给我一些代码sn-p吗?非常感谢。
【问题讨论】:
标签: java javascript
如何使用java获取位于web服务器上的js文件,然后执行js文件中的函数,得到结果并在java中使用。
你们能给我一些代码sn-p吗?非常感谢。
【问题讨论】:
标签: java javascript
您可以使用Java内置的脚本引擎:
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
public static void main(String[] args) throws Exception {
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine engine = mgr.getEngineByName("JavaScript");
Object result = engine.eval("my-java-script-code")
System.out.println("Result returned by Javascript is: " + result);
}
这里有一个更详细的example。
【讨论】:
这个过程分为三个步骤:
第一步相当简单,Java 中有很多 HTTP 库可以做到这一点 - 您实际上想要模拟 wget 或 curl 之类的简单功能。执行此操作的确切方式将根据您希望 JS 文件在下一步中采用的格式而有所不同,但获取字节流的过程很简单。
第二步需要在 Javascript 引擎中执行 JS。 Java 本身无法解释 Javascript,因此您需要获得一个引擎来运行它 - Rhino 是一个常见的选择。由于您需要在 Java 之外运行它,您可能必须使用 ProcessBuilder 在 Rhino 中生成一个执行进程。此外,根据 Javascript 的格式,您可能需要创建自己的“包装器”javascript,其功能类似于 Java 中的主类并调用相关方法。
最后你需要得到结果——显然你不能从你的 Java 程序中直接访问 JavaScript 对象。最简单的方法是让 JS 程序将结果打印到标准输出(可能序列化为 JSON 之类的东西,具体取决于对象的复杂性),由于您启动的方式,这些结果将直接流式传输到您的 Java 应用程序犀牛工艺。如果有的话,这可能是您的 JS 包装器脚本的另一项工作。否则,如果 JS 函数具有可观察到的副作用(创建文件/修改数据库),那么您将能够直接从 Java 中查询这些副作用。
工作完成。
我希望你意识到这个问题远太模糊了,无法得到完整的答案。要求公众设计一个完整的系统超出了您将获得有用的、可操作的响应的范围。
【讨论】:
网上有很多关于如何download a file from a URL的例子。
Suns 版本的 JDK 和 JRE 包括 Mozilla Rhino 脚本引擎。
假设您已将 javascript 文件的内容存储在一个名为“脚本”的字符串中,您可以按如下方式执行脚本
String result = null;
ScriptEngineManager mgr = new ScriptEngineManager();
ScriptEngine jsEngine = mgr.getEngineByName("JavaScript");
try {
jsEngine.eval(script);
result = jsEngine.get("result")
} catch (ScriptException ex) {
ex.printStackTrace();
}
结果将从引擎中提取并存储在“结果”变量中。
这是一个关于scripting in Java 的教程,可能有用。
【讨论】: