JDK 6 - 08: Scripting : MultiScopes

0

Written on 오전 4:46 by 강여사(J.Y.Kang)

스크립트 변수 예제에서, 스크립트 전역 변수로 어플리케이션 객체를 표현하는 방법을 봤었다. 스크립트를 위한 다중 전역 “영역”을 표현할 수 있다. 단일 영역은 javax.script,Bindings의 인스턴스다. 이 인터페이스는 java.util.Map에서 파생되었다. A scope a set of name-value pairs where name is any non-empty, non-null String. 다중 영역은 javax.script,SriptContext 인터페이스에 의해 지원된다. 디폴트로, 각 스크립트 엔진은 기본 스크립트 context를 가진다. 기본 스크립트 context는 소위 “ENGINE_SCOPE” 라고 불리는 적어도 하나의 영역을 가진다. 스크립트 context에 의해 지원되는 다양한 영역은 getScopes 메소드를 통해 사용가능하다.

=================================================================================
package test;

import javax.script.Bindings;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.SimpleScriptContext;

public class MultiScopes {

public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");

engine.put("x", "hello");
// print global variable "x"
engine.eval("println(x);");
// the above line prints "hello"

// Now, pass a different script context
ScriptContext newContext = new SimpleScriptContext();
Bindings engineScope = newContext.getBindings(ScriptContext.ENGINE_SCOPE);

// add new variable "x" to the new engineScope
engineScope.put("x", "world");

// execute the same script - but this time pass a different script context
engine.eval("println(x);", newContext);
// the above line prints "world"
}
}
=================================================================================

If you enjoyed this post Subscribe to our feed


No Comment

댓글 쓰기