如何使用java獲取位於Web服務器上的js文件,然後在js文件中執行該函數並獲取結果並使用在java中的結果。如何使用java獲取js文件並執行它,然後獲得結果
你們可以給我一些代碼片段嗎?萬分感謝。
如何使用java獲取位於Web服務器上的js文件,然後在js文件中執行該函數並獲取結果並使用在java中的結果。如何使用java獲取js文件並執行它,然後獲得結果
你們可以給我一些代碼片段嗎?萬分感謝。
有三個步驟這個過程:
第一步相當簡單,Java中有很多HTTP庫會這樣做 - 你實際上想要模擬wget或curl之類的簡單功能。這樣做的確切方式將取決於您希望JS文件進入下一步的格式,但獲取字節流的過程非常簡單。
第二步將需要在Javascript引擎中執行JS。 Java本身不能解釋Javascript,所以你需要獲得一個引擎來運行它 - Rhino是一個常見的選擇。既然你需要在Java之外運行,你可能需要使用ProcessBuilder產生一個在Rhino中執行的進程。此外,根據Javascript的格式,您可能需要創建自己的「包裝器」JavaScript,其功能類似於Java中的主類,並調用相關方法。
最後你需要得到結果 - 顯然你沒有直接訪問Java程序中的JavaScript對象。最簡單的方法是讓JS程序將結果打印到標準輸出(可能按照對象的複雜性序列化爲JSON之類的東西),由於您啓動的方式將直接流向Java應用程序犀牛進程。這可能是你的JS包裝腳本的另一個工作,如果有的話。否則,如果JS函數具有可觀察的副作用(創建文件/修改數據庫),那麼您將能夠直接從Java查詢那些。
工作完成。
我希望你認識到這個問題是遠太模糊得到完整的答案。要求公衆設計一個完整的系統已經超出了你將獲得有用的,可操作的反應的程度。
您可以使用內置到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。
網上有很多關於如何download a file from a URL的例子。
太陽版的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的教程,可能會有用。