http://www.informit.com/articles/article.aspx?p=696621
문자열에 담긴 스크립트 실행하기
스크립트 엔진은 ScriptEngine 인터페이스를 구현하고 있습니다. 보통은 AbstractScriptEngine 클래스를 계승하여 스크립트 엔진을 만드는데, 이 AbstractScriptEngine 클래스도 ScriptEngine 인터페이스를 구현하고 있습니다. ScriptEngine 인터페이스에는 6개의 eval()함수가 제공되며, 이를 통해 스크립트를 실행할 수 있습니다.
예를 들어 eval(String script) 함수를 이용하여 문자열에 담긴 스크립트를 실행할 수 있습니다. 스크립트의 실행 결과는 Object 타입으로 넘어오며, 만일 리턴값이 없으면 null이 넘어 옵니다. 스크립트를 실행하다가 에러가 발생하면 ScriptExceptioin 예외가 발생하게 됩니다.
// ScriptDemo2.java import javax.script.*; public class ScriptDemo2 { public static void main(String[] args) throws ScriptException { // Create a ScriptEngineManager that discovers all script engine // factories (and their associated script engines) that are visible to // the current thread's classloader. ScriptEngineManager manager = new ScriptEngineManager(); // Obtain a ScriptEngine that supports the JavaScript short name. ScriptEngine engine = manager.getEngineByName("JavaScript"); // Evaluate a script that does not return an object. Object o = engine.eval("print ('Hello, World')"); System.out.println("Object value: " + o); // Evaluate a second script that returns an object. o = engine.eval("Math.cos (Math.PI)"); System.out.println("Object value: " + o); System.out.println("Object is Double: " + (o instanceof Double)); } }
그래서 위 ScriptDemo2를 실행하면 다음과 같은 결과가 나옵니다.
Hello, World
Object value: null
Object value: -1.0
Object is Double: true
Object o = engine.eval(new FileReader("script.js"));
스크립트 엔진의 상태를 설정하고 읽기
스크립트 엔진은 상태를 저장하고 있으며, 이는 Java 프로그램에 의해 읽거나 변경될 수 있습니다. put(String key, Object value) 함수를 이용하면 엔진의 상태에 특정 키의 값을 넣을 수 있습니다. 여기서 인자로 넣는 key는 스크립트 내부에서 변수의 이름으로 쓰이고, value는 그 변수의 값으로 할당됩니다.
비슷하게 get(String key) 함수를 통해 스크립트 엔진 내부 상태에 저장된 key의 값을 읽을 수 있습니다. 아래 ScriptDemo3는 이를 보여 줍니다.
// ScriptDemo3.java import javax.script.*; public class ScriptDemo3 { public static void main(String[] args) throws ScriptException { // Create a ScriptEngineManager that discovers all script engine // factories (and their associated script engines) that are visible to // the current thread's classloader. ScriptEngineManager manager = new ScriptEngineManager(); // Obtain a ScriptEngine that supports the JavaScript short name. ScriptEngine engine = manager.getEngineByName("JavaScript"); // Initialize the age script variable to 85 (an Integer). engine.put("age", 85); // Evaluate a script that determines if a person can obtain an amount to // deduct from their taxable income based on age. engine.eval("var ageAmount = 0.0; if (age >= 65) ageAmount += 6000;"); // Retrieve the ageAmount script variable (a Double) and output its // value. System.out.println("ageAmount = " + engine.get("ageAmount")); } }
ageAmount = 6000.0
댓글 없음:
댓글 쓰기