2009-05-19 9 views
9

私の状況は次のとおりです。JavaのRhinoコンテキストに.jsファイルをロードする方法

JavaクラスのRhinoコンテキストオブジェクトにアクセスできます。私はたくさんの.jsファイルを読み込み、それらを評価するためにRhinoのコンテキストに渡したいと思っています。私は、.jsファイル内の関数をスクリプト・コンテキストで使用できるようにすることに本当に関心がありません。これは、.jsファイルで宣言されている変数を使用するだけです(これはツーリング検証の種類です)。

理想的には、各ファイルを一度に読み込み、行ごとに評価するのは理想的です。 evaluateReader()というContext(Rhino API参照)にメソッドがあることに気付きました。私が最初に推測するのは、ロードするすべてのファイルを取得し、それらをすべて調べ、このメソッドを各自のリーダーオブジェクトに渡して呼び出すことです。

私はそこで正しい軌道に乗っていると仮定すると、Javaスクリプティングコンテキストで.jsファイルを使用するために従うべき良いプラクティスがあるかどうか、またはより良い方法があれば教えてください。あなたは他のやり方でそれをやった?

ここで実装の詳細を探しているわけではありません。コードの一部で既にこれを行っている可能性のある他の人からのフィードバックだけです。 Javaからのスクリプト言語の混乱は私には新しかったです。

答えて

12

ご存知ですか?Rhino ships in Java 6?あなたは、Java 5でそれを使用したい場合は

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); 

は、あなたがAPI別途downloadする必要があります。 scripting.dev.java.netから多くの一般的なスクリプト言語のエンジンを入手できます。

+0

"多くの一般的なスクリプト言語のエンジンは、scripting.dev.java.netから入手できます。"いいえ、私たちはもうできません。私はこれが非常に古くなっていることを知っていますが、使用するべき新しいリンクがありますか? – hexafraction

+0

@hexafractionこの質問をお試しください:http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages – McDowell

+0

+1ありがとう、それとWebアーカイブには[ヘルプ](http://web.archive.org/web/20070610234337/https://scripting.dev.java.net/)があります。 – hexafraction

関連する問題