2010-01-14 52 views

回答

4

有三個步驟這個過程:

  1. 從服務器獲取JS文件。
  2. 從文件中執行一些JS函數。
  3. 提取結果。

第一步相當簡單,Java中有很多HTTP庫會這樣做 - 你實際上想要模擬wget或curl之類的簡單功能。這樣做的確切方式將取決於您希望JS文件進入下一步的格式,但獲取字節流的過程非常簡單。

第二步將需要在Javascript引擎中執行JS。 Java本身不能解釋Javascript,所以你需要獲得一個引擎來運行它 - Rhino是一個常見的選擇。既然你需要在Java之外運行,你可能需要使用ProcessBuilder產生一個在Rhino中執行的進程。此外,根據Javascript的格式,您可能需要創建自己的「包裝器」JavaScript,其功能類似於Java中的主類,並調用相關方法。

最後你需要得到結果 - 顯然你沒有直接訪問Java程序中的JavaScript對象。最簡單的方法是讓JS程序將結果打印到標準輸出(可能按照對象的複雜性序列化爲JSON之類的東西),由於您啓動的方式將直接流向Java應用程序犀牛進程。這可能是你的JS包裝腳本的另一個工作,如果有的話。否則,如果JS函數具有可觀察的副作用(創建文件/修改數據庫),那麼您將能夠直接從Java查詢那些。

工作完成。

我希望你認識到這個問題是太模糊得到完整的答案。要求公衆設計一個完整的系統已經超出了你將獲得有用的,可操作的反應的程度。

11

您可以使用內置到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

3

網上有很多關於如何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的教程,可能會有用。

相關問題