圖 1 顯示了應用程序、Java 腳本 API 和 ScriptEngine 實現、腳本語言解釋器之間的總體關系。我們可以看到,應用程序只依賴于腳本 API,它提供了 ScriptEngineManager 類和 ScriptEngine 接口。ScriptEngine 實現組件處理使用特定腳本語言解釋器的細節。
圖 1:腳本 API 組件關系
您可能會問:如何才能獲取腳本引擎實現和語言解釋器所需的 JAR 文件呢?最好的方法是在 java.net 上托管的開源 Scripting 項目中查找腳本引擎實現(請參閱 參考資料)。您可以在 java.net 上找到許多語言的腳本引擎實現和其他網站的鏈接。Scripting 項目還提供了各種鏈接,通過這些鏈接可以下載受支持的腳本語言的解釋器。
在 清單 1 中,main() 方法將 ScriptEngine 傳遞給各個方法用于計算該方法的 JavaScript 代碼。第一個方法如清單 2 所示。invokeHelloScript() 方法調用腳本引擎的 eval 方法計算和執行 JavaScript 代碼中的特定字符串。ScriptEngine 接口定義了 6 個重載的 eval() 方法,用于將接收的腳本當作字符串或 java.io.Reader 對象計算,java.io.Reader 對象一般用于從外部源(例如文件)讀取腳本。
清單 2. invokeHelloScript 方法
private static void invokeHelloScript(ScriptEngine jsEngine) throws ScriptException {
jsEngine.eval("println('Hello from JavaScript')");
}