Downcodes의 편집기는 JavaScript를 호출하는 Java의 다양한 방법을 보여줍니다! Java와 JavaScript 간의 상호 운용성은 점점 더 중요해지고 있으며, 이 기사에서는 ScriptEngineManager, Nashorn JavaScript 엔진, Duktape 및 GraalVM을 사용하는 네 가지 주요 방법을 심층적으로 살펴보겠습니다. 이러한 각 방법에는 고유한 장점과 단점이 있으며 다양한 시나리오에 적합하므로 개발자가 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 플랫폼은 Java SE 6 이상의 javax.script 패키지의 일부인 ScriptEngineManager 클래스를 제공하며, 이는 스크립팅 언어와의 통합을 제공하도록 특별히 설계되었습니다. ScriptEngineManager를 사용하면 Java 코드가 스크립팅 언어와 상호 작용할 수 있으므로 신속한 개발 및 동적 타이핑과 같은 스크립팅 언어의 장점을 활용할 수 있습니다.
ScriptEngineManager를 사용하려면 인스턴스를 생성하고 이를 통해 JavaScript 실행 환경을 확보하기만 하면 됩니다. 다음은 ScriptEngineManager를 사용하는 방법에 대한 간단한 예입니다.
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
공개 클래스 JavaScriptFromJava {
공개 정적 무효 mAIn(String[] args) {
// ScriptEngineManager 객체 생성
ScriptEngineManager 관리자 = 새로운 ScriptEngineManager();
// JavaScript의 ScriptEngine을 가져옵니다.
ScriptEngine 엔진 = Manager.getEngineByName(JavaScript);
노력하다 {
//자바스크립트 코드 실행
engine.eval(print('Hello, World!'));
} 잡기(ScriptException e) {
e.printStackTrace();
}
}
}
Java SE 8부터 도입된 Nashorn은 JVM에서 JavaScript를 실행할 수 있는 고성능 JavaScript 엔진으로, ECMAScript 5.1 사양과 더 나은 성능과 호환성을 제공합니다.
ScriptEngineManager와 유사하게 Nashorn 엔진의 인스턴스를 얻고 JavaScript 코드를 실행하려면 이 클래스를 사용해야 합니다.
import javax.script.ScriptEngineManager;
import javax.script.ScriptEngine;
import javax.script.ScriptException;
공개 클래스 Nashorn예제 {
공개 정적 무효 메인(String[] args) {
// ScriptEngineManager 생성
ScriptEngineManager 관리자 = 새로운 ScriptEngineManager();
// Nashorn의 ScriptEngine 가져오기
ScriptEngine 엔진 = Manager.getEngineByName(nashorn);
노력하다 {
//자바스크립트 스크립트 실행
engine.eval(print('안녕하세요, 나스호른!'));
} 잡기(ScriptException e) {
e.printStackTrace();
}
}
}
Duktape은 가볍고 통합이 용이하며 다양한 시스템에서 JavaScript 실행 환경을 제공할 수 있는 임베디드 JavaScript 엔진입니다. Duktape는 리소스가 제한된 환경에서 JavaScript를 실행해야 하는 상황에 적합합니다.
Duktape은 C로 작성된 JavaScript 엔진이므로 일반적으로 JNI(Java Native Interface)를 통해 Java 애플리케이션과 통합되어야 합니다. Java 코드와 Duktape 엔진을 연결하려면 해당 JNI 코드를 작성해야 합니다.
// 이미 JNI 인터페이스가 있다고 가정합니다.
공개 클래스 DuktapeExample {
//JNI 메소드 선언
공개 네이티브 String ExecuteScript(String 스크립트);
정적 {
//네이티브 메소드 구현이 포함된 라이브러리 로드
System.loadLibrary(duktape);
}
공개 정적 무효 메인(String[] args) {
DuktapeExample 예제 = new DuktapeExample();
// Duktape를 호출하여 JNI를 통해 JavaScript를 실행합니다.
String result = example.executeScript(var msg = 'Hello, Duktape!'; msg;);
System.out.println(결과);
}
}
GraalVM은 Java 및 JavaScript를 포함한 여러 언어를 실행할 수 있는 새로운 가상 머신입니다. GraalVM의 목적은 고성능 및 다중 언어 공존이 특징인 모든 프로그래밍 언어를 실행할 수 있는 단일 런타임을 제공하는 것입니다.
GraalVM에서는 Context 클래스를 사용하여 JavaScript 실행을 위한 런타임 환경을 생성할 수 있습니다.
import org.graalvm.polyglot.*;
공개 클래스 GraalVMExample {
공개 정적 무효 메인(String[] args) {
// GraalVM의 컨텍스트를 사용하여 JavaScript 코드 실행
try (컨텍스트 컨텍스트 = Context.create()) {
// 자바스크립트 코드 실행
값 결과 = context.eval(js, print('Hello, GraalVM!'););
}
}
}
위의 방법을 통해 Java는 JavaScript 스크립트를 호출하고 다양한 시나리오에서 JavaScript의 동적 프로그래밍 특성을 활용할 수 있습니다. ScriptEngineManager, Nashorn, Duktape 또는 GraalVM을 통해 Java 및 JavaScript 상호 운용성은 개발자에게 유연하고 기능이 풍부한 애플리케이션을 만들 수 있는 강력한 도구를 제공합니다.
1. Java 코드에서 JavaScript 스크립트를 호출하는 방법은 무엇입니까?
Java의 ScriptEngine 인터페이스를 사용하면 Java에서 JavaScript 스크립트를 호출할 수 있습니다. 먼저 ScriptEngine 인스턴스를 생성한 다음 JavaScript 스크립트를 인스턴스에 로드해야 합니다. 다음으로 ScriptEngine 인스턴스의 eval() 메서드를 사용하여 JavaScript 코드를 실행할 수 있습니다. 예를 들어:
//ScriptEngine 인스턴스 생성 ScriptEngineManager Manager = new ScriptEngineManager();ScriptEngine 엔진 = Manager.getEngineByName(JavaScript);try { //JavaScript 스크립트 로드 엔진.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 엔진 = 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 void sayHello() { System.out.println(Hello from Java!);3. Java에서 JavaScript 스크립트의 반환 값을 얻는 방법은 무엇입니까?
JavaScript 스크립트의 반환 값을 얻으려면 ScriptEngine 인스턴스의 eval() 메서드를 사용하여 스크립트를 실행하고 반환 값을 변수에 저장할 수 있습니다. 예를 들어:
//ScriptEngine 인스턴스 생성 ScriptEngineManager Manager = new ScriptEngineManager();ScriptEngine 엔진 = 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 편집기를 따르십시오!