سيعرض لك محرر Downcodes الطرق المختلفة لاستدعاء Java لـ JavaScript! تتزايد أهمية قابلية التشغيل البيني بين Java وJavaScript، وستلقي هذه المقالة نظرة متعمقة على أربع طرق رئيسية: استخدام ScriptEngineManager ومحرك Nashorn JavaScript وDuktape وGraalVM. كل من هذه الأساليب لها مزاياها وعيوبها وهي مناسبة لسيناريوهات مختلفة، مما يساعد المطورين على استخدام وظائف JavaScript القوية في تطبيقات Java بمرونة لتحسين كفاءة التطوير وأداء التطبيقات. ستساعدك المقالة على إتقان هذه التقنيات بسرعة من خلال أمثلة التعليمات البرمجية الواضحة والتفسيرات التفصيلية، وتأتي مع الأسئلة الشائعة لمساعدتك في الحصول على فهم أعمق للتفاعل بين Java وJavaScript.
يمكن أن تستدعي تعليمات Java البرمجية نصوص JavaScript بعدة طرق، بما في ذلك استخدام ScriptEngineManager ومحرك Nashorn JavaScript وDuktape وGraalVM. تتيح هذه التقنيات تنفيذ تعليمات JavaScript البرمجية في جهاز Java الظاهري، وبالتالي زيادة مرونة JavaScript ووظائفها في تطبيقات Java.
على سبيل المثال، يعد استخدام ScriptEngineManager طريقة شائعة لـ Java لاستدعاء برامج JavaScript النصية لأنها طريقة قياسية مضمنة في Java. بالإضافة إلى ذلك، مع إطلاق GraalVM الجديد عالي الأداء من Oracle، أصبح تشغيل برامج JavaScript النصية من خلال GraalVM أكثر كفاءة.
توفر منصة Java فئة ScriptEngineManager، والتي تعد جزءًا من حزمة javax.script في Java SE 6 وما فوق، والتي تم تصميمها خصيصًا لتوفير التكامل مع لغات البرمجة النصية. يسمح ScriptEngineManager لتعليمات Java البرمجية بالتفاعل مع لغات البرمجة النصية، وبالتالي الاستفادة من مزايا لغات البرمجة النصية، مثل التطور السريع والكتابة الديناميكية.
لاستخدام ScriptEngineManager، تحتاج فقط إلى إنشاء مثيل له والحصول على بيئة تنفيذ JavaScript من خلاله. فيما يلي مثال بسيط لكيفية استخدام ScriptEngineManager:
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
الطبقة العامة JavaScriptFromJava {
الفراغ الثابت العام MAIn(String[] args) {
// إنشاء كائن ScriptEngineManager
ScriptEngineManager manager = new ScriptEngineManager();
// احصل على ScriptEngine لجافا سكريبت
محرك ScriptEngine = manager.getEngineByName(JavaScript);
يحاول {
// تنفيذ كود جافا سكريبت
Engine.eval(print('مرحبا أيها العالم!'));
} قبض على (ScriptException ه) {
printStackTrace();
}
}
}
Nashorn، الذي تم تقديمه منذ Java SE 8، هو محرك JavaScript عالي الأداء يسمح بتشغيل JavaScript على JVM، مما يوفر أداءً أفضل وتوافقًا مع مواصفات ECMAScript 5.1.
كما هو الحال مع ScriptEngineManager، تحتاج إلى استخدام هذه الفئة للحصول على مثيل لمحرك Nashorn وتنفيذ تعليمات JavaScript البرمجية.
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
الطبقة العامة NashornExample {
public static void main(String[] args) {
// إنشاء ScriptEngineManager
ScriptEngineManager manager = new ScriptEngineManager();
// احصل على ScriptEngine الخاص بـ Nashorn
محرك ScriptEngine = manager.getEngineByName(nashorn);
يحاول {
// تنفيذ البرنامج النصي جافا سكريبت
Engine.eval(print('مرحبا، ناشورن!'));
} قبض على (ScriptException ه) {
printStackTrace();
}
}
}
Duktape هو محرك JavaScript مضمن وخفيف الوزن وسهل التكامل ويمكنه توفير بيئة تنفيذ JavaScript في أنظمة مختلفة. يعد Duktape مناسبًا للمواقف التي تحتاج فيها إلى تشغيل JavaScript في بيئات محدودة الموارد.
نظرًا لأن Duktape هو محرك JavaScript مكتوب بلغة C، فإنه عادةً ما يحتاج إلى التكامل مع تطبيقات Java من خلال JNI (Java Native Interface). يجب كتابة كود JNI المقابل لسد كود Java ومحرك Duktape.
// افترض أن هناك بالفعل واجهة JNI
الطبقة العامة DuktapeExample {
// إعلان طريقة JNI
سلسلة تنفيذية أصلية عامة (سلسلة نصية) ؛
ثابت {
// قم بتحميل المكتبة التي تحتوي على تطبيق الطريقة الأصلية
System.loadLibrary(duktape);
}
public static void main(String[] args) {
DuktapeExample example = new DuktapeExample();
// اتصل بـ Duktape لتنفيذ JavaScript من خلال JNI
نتيجة السلسلة = example.executeScript(var msg = 'Hello, Duktape!'; msg;);
System.out.println(result);
}
}
GraalVM هو جهاز افتراضي جديد تمامًا يمكنه تنفيذ لغات متعددة، بما في ذلك Java وJavaScript. الغرض من GraalVM هو توفير وقت تشغيل واحد لتنفيذ جميع لغات البرمجة، والذي يتميز بالأداء العالي والتعايش متعدد اللغات.
في GraalVM، يمكنك استخدام فئة السياق لإنشاء بيئة تشغيل لتنفيذ JavaScript.
import org.graalvm.polyglot.*;
الطبقة العامة GraalVMExample {
public static void main(String[] args) {
// استخدم سياق GraalVM لتشغيل كود JavaScript
حاول (سياق السياق = context.create()) {
// تشغيل كود جافا سكريبت
نتيجة القيمة = context.eval(js, print('Hello, GraalVM!'););
}
}
}
من خلال الطرق المذكورة أعلاه، يمكن لـ Java استدعاء نصوص JavaScript والاستفادة من خصائص البرمجة الديناميكية لـ JavaScript في سيناريوهات مختلفة. سواء من خلال ScriptEngineManager أو Nashorn أو Duktape أو GraalVM، فإن قابلية التشغيل التفاعلي لـ Java وJavaScript توفر للمطورين أدوات قوية لإنشاء تطبيقات مرنة وغنية بالميزات.
1. كيفية استدعاء برنامج JavaScript في كود Java؟
يمكن تحقيق استدعاء برامج JavaScript النصية في Java باستخدام واجهة Java ScriptEngine. أولاً، تحتاج إلى إنشاء مثيل ScriptEngine ثم تحميل البرنامج النصي JavaScript إلى المثيل. بعد ذلك، يمكنك استخدام التابع eval() لمثيل ScriptEngine لتنفيذ تعليمات JavaScript البرمجية. على سبيل المثال:
// إنشاء مثيل ScriptEngine ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { // تحميل JavaScript script 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؟
إذا كنت تريد الوصول إلى كائن Java في برنامج JavaScript النصي، فيمكنك ربط كائن Java بمتغير عام في مثيل ScriptEngine. بهذه الطريقة، يمكنك استخدام المتغير الموجود في برنامج JavaScript لاستدعاء أساليب كائن Java والوصول إلى خصائصه. على سبيل المثال:
// إنشاء مثيل ScriptEngine ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { // ربط كائن Java بالمتغير العام في ScriptEngine Engine.put(myObject, new MyObject()); // استخدم هذا المتغير في برنامج JavaScript script Engine.eval(myObject.sayHello(););} Catch (ScriptException e) { e.printStackTrace();}// تعريف كائن Java public class MyObject { public void sayHello() { System.out.println(Hello from Java! }}3. كيفية الحصول على القيمة المرجعة لبرنامج JavaScript النصي في Java؟
للحصول على القيمة المرجعة لبرنامج JavaScript النصي، يمكنك استخدام الأسلوب eval() لمثيل ScriptEngine لتنفيذ البرنامج النصي وتخزين القيمة المرجعة في متغير. على سبيل المثال:
// إنشاء مثيل ScriptEngine ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine Engine = manager.getEngineByName(JavaScript);try { // تنفيذ البرنامج النصي JavaScript والحصول على القيمة المرجعة Object result = Engine.eval(function sayHello() { return 'مرحبًا أيها العالم!'; } sayHello();); // نتيجة الإخراج System.out.println(result.toString());} Catch (ScriptException هـ) {e.printStackTrace();}في الكود أعلاه، القيمة المرجعة لبرنامج JavaScript النصي هي السلسلة Hello, World!. من خلال تخزين نتيجة تنفيذ البرنامج النصي في متغير النتيجة، يمكننا طباعة قيمة الإرجاع هذه.
آمل أن تساعدك هذه المقالة على فهم كيفية استدعاء Java لـ JavaScript بشكل أفضل. لمزيد من المعرفة المتعلقة بـ Java، يرجى الاستمرار في متابعة محرر Downcodes!