Downcodes のエディターでは、JavaScript を呼び出す Java のさまざまなメソッドを紹介します。 Java と JavaScript の間の相互運用性はますます重要になっており、この記事では、ScriptEngineManager、Nashorn JavaScript エンジン、Duktape、および GraalVM の使用という 4 つの主流の方法について詳しく説明します。これらの各方法には独自の長所と短所があり、さまざまなシナリオに適しており、開発者が Java アプリケーションで JavaScript の強力な機能を柔軟に使用して、開発効率とアプリケーションのパフォーマンスを向上させるのに役立ちます。この記事は、明確なコード例と詳細な説明を通じてこれらのテクノロジを迅速に習得するのに役立ち、Java と JavaScript の間の相互作用をより深く理解するのに役立つ FAQ も付属しています。
Java コードは、ScriptEngineManager、Nashorn JavaScript エンジン、Duktape、GraalVM の使用など、さまざまな方法で JavaScript スクリプトを呼び出すことができます。これらのテクノロジにより、Java 仮想マシンで JavaScript コードを実行できるようになり、Java アプリケーションにおける JavaScript の柔軟性と機能が向上します。
たとえば、ScriptEngineManager は Java に組み込まれた標準メソッドであるため、Java が JavaScript スクリプトを呼び出す一般的な方法です。さらに、Oracle の新しい高パフォーマンス GraalVM のリリースにより、GraalVM を介した JavaScript スクリプトの実行がより効率的になりました。
Java プラットフォームは、ScriptEngineManager クラスを提供します。これは、Java SE 6 以降の javax.script パッケージの一部であり、特にスクリプト言語との統合を提供するように設計されています。 ScriptEngineManager を使用すると、Java コードがスクリプト言語と対話できるようになり、迅速な開発や動的型付けなどのスクリプト言語の利点を活用できます。
ScriptEngineManager を使用するには、そのインスタンスを作成し、それを通じて JavaScript 実行環境を取得するだけです。 ScriptEngineManager の使用方法の簡単な例を次に示します。
インポートjavax.script.ScriptEngineManager;
javax.script.ScriptEngineをインポートします。
インポート javax.script.ScriptException;
パブリック クラス JavaScriptFromJava {
public static void mAIn(String[] args) {
// ScriptEngineManager オブジェクトを作成する
ScriptEngineManager マネージャー = new ScriptEngineManager();
// JavaScriptのScriptEngineを取得する
ScriptEngine エンジン = manager.getEngineByName(JavaScript);
試す {
//JavaScriptコードを実行する
Engine.eval(print('Hello, World!'));
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
Java SE 8 以降に導入された Nashorn は、JVM 上で JavaScript を実行できるようにする高性能 JavaScript エンジンで、より優れたパフォーマンスと ECMAScript 5.1 仕様との互換性を提供します。
ScriptEngineManager と同様に、このクラスを使用して Nashorn エンジンのインスタンスを取得し、JavaScript コードを実行する必要があります。
インポートjavax.script.ScriptEngineManager;
javax.script.ScriptEngineをインポートします。
javax.script.ScriptExceptionをインポートします。
パブリック クラス NashornExample {
public static void main(String[] args) {
// ScriptEngineManager を作成する
ScriptEngineManager マネージャー = new ScriptEngineManager();
// Nashorn の ScriptEngine を取得する
ScriptEngine エンジン = manager.getEngineByName(nashorn);
試す {
//JavaScriptスクリプトを実行する
Engine.eval(print('こんにちは、ナショーン!'));
} catch (ScriptException e) {
e.printStackTrace();
}
}
}
Duktape は、軽量で統合が容易な組み込み JavaScript エンジンで、さまざまなシステムに JavaScript 実行環境を提供できます。 Duktape は、リソースに制約のある環境で JavaScript を実行する必要がある状況に適しています。
Duktape は C で書かれた JavaScript エンジンであるため、通常は JNI (Java Native Interface) を通じて Java アプリケーションと統合する必要があります。 Java コードと Duktape エンジンをブリッジするには、対応する JNI コードを作成する必要があります。
// JNI インターフェースがすでに存在すると仮定します
パブリック クラス DuktapeExample {
//JNIメソッド宣言
publicnativeStringexecuteScript(Stringscript);
静的 {
//ネイティブメソッド実装を含むライブラリをロードする
System.loadLibrary(duktape);
}
public static void main(String[] args) {
DuktapeExample の例 = new DuktapeExample();
// Duktape を呼び出して JNI 経由で JavaScript を実行します
文字列 result = example.executeScript(var msg = 'こんにちは、Duktape!'; msg;);
System.out.println(結果);
}
}
GraalVM は、Java や JavaScript などの複数の言語を実行できる新しい仮想マシンです。 GraalVM の目的は、すべてのプログラミング言語を実行するための単一のランタイムを提供することです。これは、高いパフォーマンスと複数言語の共存を特徴としています。
GraalVM では、Context クラスを使用して、JavaScript を実行するためのランタイム環境を作成できます。
org.graalvm.polyglot.* をインポートします。
パブリック クラス GraalVMExample {
public static void main(String[] args) {
// GraalVM のコンテキストを使用して JavaScript コードを実行します
try (Context context = Context.create()) {
// JavaScript コードを実行します
値の結果 = context.eval(js, print('Hello, GraalVM!'););
}
}
}
上記のメソッドを通じて、Java は JavaScript スクリプトを呼び出し、さまざまなシナリオで JavaScript の動的プログラミング特性を利用できます。 ScriptEngineManager、Nashorn、Duktape、GraalVM のいずれを介しても、Java と JavaScript の相互運用性により、柔軟で機能豊富なアプリケーションを作成するための強力なツールが開発者に提供されます。
1. Java コードで JavaScript スクリプトを呼び出すにはどうすればよいですか?
Java で JavaScript スクリプトを呼び出すには、Java の ScriptEngine インターフェイスを使用します。まず、ScriptEngine インスタンスを作成し、そのインスタンスに JavaScript スクリプトをロードする必要があります。次に、ScriptEngine インスタンスの eval() メソッドを使用して、JavaScript コードを実行できます。例えば:
//ScriptEngine インスタンスを作成します ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { //JavaScript スクリプトをロードします Engine.eval(function SayHello() { return 'Hello, World!'; }); // JavaScript 関数を呼び出す Object result = Engine.eval(sayHello()); //出力結果 System.out.println(result.toString());} catch (ScriptException e) { e.printStackTrace();}2. Java オブジェクトを JavaScript スクリプトに渡すにはどうすればよいですか?
JavaScript スクリプトで Java オブジェクトにアクセスする場合は、その Java オブジェクトを ScriptEngine インスタンスのグローバル変数にバインドできます。このようにして、JavaScript スクリプトで変数を使用して、Java オブジェクトのメソッドを呼び出し、そのプロパティにアクセスできます。例えば:
//ScriptEngine インスタンスを作成します ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { //Java オブジェクトを ScriptEngine のグローバル変数にバインドします Engine.put(myObject, new MyObject()); // この変数を JavaScript スクリプトで使用します Engine.eval(myObject.sayHello(););} catch (ScriptException e) { e.printStackTrace();}// Java オブジェクトを定義します public class MyObject { public voidsayHello() { System.out.println(Java から Hello!) }}3. Java で JavaScript スクリプトの戻り値を取得するにはどうすればよいですか?
JavaScript スクリプトの戻り値を取得するには、ScriptEngine インスタンスの eval() メソッドを使用してスクリプトを実行し、戻り値を変数に格納します。例えば:
//ScriptEngine インスタンスを作成します ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { //JavaScript スクリプトを実行し、戻り値を取得します Object result = Engine.eval(function SayHello() { return 'Hello, World!'; }sayHello();) // 結果を出力 System.out.println(result.toString());} catch (ScriptException) e) { e.printStackTrace();}上記のコードでは、JavaScript スクリプトの戻り値は文字列 Hello, World! です。スクリプトの実行結果を result 変数に格納することで、この戻り値を出力できます。
この記事が、Java が JavaScript を呼び出す方法をより深く理解するのに役立つことを願っています。 Java 関連の知識をさらに知りたい場合は、引き続き Downcodes エディターをフォローしてください。