โปรแกรมแก้ไข 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:
นำเข้า javax.script.ScriptEngineManager;
นำเข้า javax.script.ScriptEngine;
นำเข้า javax.script.ScriptException;
JavaScriptFromJava คลาสสาธารณะ {
โมฆะสาธารณะคงที่ mAIn (String [] args) {
// สร้างวัตถุ ScriptEngineManager
ผู้จัดการ ScriptEngineManager = ScriptEngineManager ใหม่ ();
// รับ ScriptEngine ของ JavaScript
กลไก ScriptEngine = manager.getEngineByName(JavaScript);
พยายาม {
// รันโค้ด JavaScript
engine.eval(พิมพ์('สวัสดีชาวโลก!'));
} จับ (ScriptException จ) {
e.printStackTrace();
-
-
-
Nashorn เปิดตัวตั้งแต่ Java SE 8 เป็นเครื่องมือ JavaScript ประสิทธิภาพสูงที่ช่วยให้สามารถรัน JavaScript บน JVM ได้ ซึ่งให้ประสิทธิภาพที่ดีขึ้นและความเข้ากันได้กับข้อกำหนด ECMAScript 5.1
เช่นเดียวกับ ScriptEngineManager คุณต้องใช้คลาสนี้เพื่อรับอินสแตนซ์ของกลไก Nashorn และรันโค้ด JavaScript
นำเข้า javax.script.ScriptEngineManager;
นำเข้า javax.script.ScriptEngine;
นำเข้า javax.script.ScriptException;
คลาสสาธารณะ NashornExample {
โมฆะคงที่สาธารณะ main (String [] args) {
// สร้าง ScriptEngineManager
ผู้จัดการ ScriptEngineManager = ScriptEngineManager ใหม่ ();
// รับ ScriptEngine ของ Nashorn
เอ็นจิ้น ScriptEngine = manager.getEngineByName(nashorn);
พยายาม {
// รันสคริปต์ JavaScript
engine.eval(print('สวัสดี Nashorn!'));
} จับ (ScriptException จ) {
e.printStackTrace();
-
-
-
Duktape เป็นเอ็นจิ้น JavaScript แบบฝังที่มีน้ำหนักเบา บูรณาการได้ง่าย และสามารถจัดเตรียมสภาพแวดล้อมการดำเนินการ JavaScript ในระบบต่างๆ Duktape เหมาะสำหรับสถานการณ์ที่คุณต้องรัน JavaScript ในสภาพแวดล้อมที่มีทรัพยากรจำกัด
เนื่องจาก Duktape เป็นเอ็นจิ้น JavaScript ที่เขียนด้วยภาษา C จึงมักจะจำเป็นต้องรวมเข้ากับแอปพลิเคชัน Java ผ่าน JNI (Java Native Interface) จำเป็นต้องเขียนโค้ด JNI ที่สอดคล้องกันเพื่อเชื่อมโยงโค้ด Java และกลไก Duktape
// สมมติว่ามีอินเทอร์เฟซ JNI อยู่แล้ว
คลาสสาธารณะ DuktapeExample {
//การประกาศเมธอด JNI
สาธารณะสตริงดำเนินการสคริปต์ (สคริปต์สตริง);
คงที่ {
//โหลดไลบรารีที่มีการนำเมธอดเนทิฟไปใช้
System.loadLibrary(ดูเทป);
-
โมฆะคงที่สาธารณะ main (String [] args) {
ตัวอย่าง DuktapeExample = ใหม่ DuktapeExample();
// เรียก Duktape เพื่อรัน JavaScript ผ่าน JNI
ผลลัพธ์สตริง = example.executeScript(var msg = 'Hello, Duktape!'; msg;);
System.out.println (ผลลัพธ์);
-
-
GraalVM เป็นเครื่องเสมือนใหม่ล่าสุดที่สามารถใช้งานได้หลายภาษา รวมถึง Java และ JavaScript วัตถุประสงค์ของ GraalVM คือการจัดหารันไทม์เดียวเพื่อดำเนินการภาษาการเขียนโปรแกรมทั้งหมด ซึ่งโดดเด่นด้วยประสิทธิภาพสูงและการอยู่ร่วมกันหลายภาษา
ใน GraalVM คุณสามารถใช้คลาส Context เพื่อสร้างสภาพแวดล้อมรันไทม์สำหรับการรัน JavaScript
นำเข้า org.graalvm.polyglot.*;
GraalVMExample คลาสสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
// ใช้บริบทของ GraalVM เพื่อเรียกใช้โค้ด JavaScript
ลอง (บริบทบริบท = Context.create()) {
// เรียกใช้โค้ด JavaScript
ผลลัพธ์ค่า = context.eval(js, print('Hello, GraalVM!'););
-
-
-
ด้วยวิธีการข้างต้น Java สามารถเรียกใช้สคริปต์ JavaScript และใช้คุณลักษณะการเขียนโปรแกรมแบบไดนามิกของ JavaScript ในสถานการณ์ที่แตกต่างกัน ไม่ว่าจะผ่าน ScriptEngineManager, Nashorn, Duktape หรือ GraalVM ความสามารถในการทำงานร่วมกันของ Java และ JavaScript ช่วยให้นักพัฒนามีเครื่องมืออันทรงพลังในการสร้างแอปพลิเคชันที่ยืดหยุ่นและเต็มไปด้วยคุณสมบัติต่างๆ
1. จะเรียกสคริปต์ JavaScript ในโค้ด Java ได้อย่างไร?
การเรียกสคริปต์ JavaScript ใน Java สามารถทำได้โดยใช้อินเทอร์เฟซ ScriptEngine ของ Java ขั้นแรก คุณต้องสร้างอินสแตนซ์ ScriptEngine จากนั้นโหลดสคริปต์ JavaScript ลงในอินสแตนซ์ จากนั้น คุณสามารถใช้เมธอด eval() ของอินสแตนซ์ ScriptEngine เพื่อรันโค้ด JavaScript ได้ ตัวอย่างเช่น:
//สร้างอินสแตนซ์ ScriptEngine ScriptEngineManager manager = new ScriptEngineManager();ScriptEngine engine = manager.getEngineByName(JavaScript);try { //Load JavaScript script engine.eval(function sayHello() { return 'Hello, World!'; }); // เรียกใช้ฟังก์ชัน JavaScript ผลลัพธ์ของวัตถุ = 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);ลอง { //ผูกอ็อบเจ็กต์ Java เข้ากับตัวแปรโกลบอลใน ScriptEngine engine.put(myObject, new MyObject()); // ใช้ตัวแปรนี้ในสคริปต์ JavaScript engine.eval(myObject.sayHello(););} catch (ScriptException e) { e.printStackTrace();}// กำหนดคลาสสาธารณะของอ็อบเจ็กต์ Java 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);ลอง { //เรียกใช้งานสคริปต์ JavaScript และรับค่าส่งคืน Object result = engine.eval(function sayHello() { return 'สวัสดีชาวโลก!'; } sayHello();); // Output result System.out.println(result.toString());} catch (ScriptException จ) { e.printStackTrace();}ในโค้ดข้างต้น ค่าที่ส่งคืนของสคริปต์ JavaScript คือสตริง Hello, World! โดยการจัดเก็บผลลัพธ์ของการรันสคริปต์ในตัวแปรผลลัพธ์ เราสามารถพิมพ์ค่าที่ส่งคืนนี้ได้
ฉันหวังว่าบทความนี้จะช่วยให้คุณเข้าใจได้ดีขึ้นว่า Java เรียก JavaScript อย่างไร สำหรับความรู้เพิ่มเติมเกี่ยวกับ Java โปรดติดตามบรรณาธิการของ Downcodes ต่อไป!