-----------------------------------------------------------------------------------
출처: http://cherrykyun.tistory.com/tag/Java%EC%97%90%EC%84%9C%20JavaScript%ED%98%B8%EC%B6%9C
-----------------------------------------------------------------------------------
[원본 출처]
: IBM Developer works 2007/10/16 - 동적인 언어를 동적으로 호출하기, Part 1, 2 : 자바 스크립팅 API
http://www.ibm.com/developerworks/kr/library/j-javascripting1/index.html?S_TACT=105AGX55&S_CMP=EDU,
http://www.ibm.com/developerworks/kr/library/j-javascripting2/?S_TACT=105AGX55&S_CMP=EDU
[영문 자료]
http://www.ibm.com/developerworks/library/j-javascripting1/
http://www.ibm.com/developerworks/java/library/j-javascripting2/
자세한 설명은 출처를 참고할 것.
모든 DBMS들이 JDBC Interface를 구현하였기 때문에 사용자는 해당 DBMS의 Driver를 로드한 후 JDBC Interface만 보고 일관된 프로그래미을 할 수 있듯이
Java 6.0부터는 스크립팅 패키지를 제공하여 여러가지 동적 스크립트들이 스크립팅 패키지에서 제공하는 인터페이스를 구현하도록 하고 마치 Driver를 Load하듯이
ScriptEngine를 획득하여 그것만 보고 Script들을 호출할 수 있다.
Java는 모든 태스크의 최상의 언어는 아니지만 2006.12월부터 제공하는 스크립팅 패키지를 통해 런타임에 스크립트 언어들의 강력한 장점들을 사용할 수 있게 되었다.
아래는 Java에서 JavaScript언어를 호출하는 예제이다. 자세한 원리는 출처를 통해 알 수 있다.
import!! javax.script.ScriptEngine;
import!! javax.script.ScriptEngineManager;
import!! javax.script.ScriptException;
public class HelloScriptingWorld {
public static void main(String[] args) throws ScriptException, NoSuchMethodException
{
ScriptEngineManager scriptEngineMgr = new ScriptEngineManager();
ScriptEngine jsEngine = scriptEngineMgr.getEngineByName("JavaScript");
if(jsEngine == null) {
System.err.println("No script engine found for JavaScript");
System.exit(1);
}
// Java에서 JavaScript 실행
System.out.println("Calling invokeHellosSript...");
invokeHelloScript(jsEngine);
// Java에서 JavaScript 함수 정의
System.out.println("\nCalling defineScriptFunction...");
defineScriptFunction(jsEngine);
// 이전 메소드에서 정의한 JavaScript 함수 호출
System.out.println("\nCalling invokeScriptFunctionFromEngine...");
invokeScriptFunctionFromEngine(jsEngine);
// Invocable Interface를 사용한 JavaScript 함수 호출
System.out.println("\nCalling invokeScriptFunctionFromJava...");
invokeScriptFunctionFromJava(jsEngine);
// JavaScript에서 Java함수 호출
System.out.println("\nCalling invokeJavaFromScriptFunction...");
invokeJavaFromScriptFunction(jsEngine);
}
/**
* Java에서 JavaScript문법을 수행한다.
* @param jsEngine
* @throws ScriptException
*/
private static void invokeHelloScript (ScriptEngine jsEngine) throws ScriptException
{
jsEngine.eval!!("println('Hello from JavaScript')");
}
/**
* Java에서 JavaScript함수를 정의한다.
* @param engine
* @throws ScriptException
*/
private static void defineScriptFunction(ScriptEngine engine) throws ScriptException
{
// Define a function in the script engine
engine.eval!!(
"function sayHello(name) {" +
" println('Hello, ' + name)" +
"}"
);
}
/**
* Java에서 정의한 JavaScript함수를 호출한다.
* @param engine
* @throws ScriptException
*/
private static void invokeScriptFunctionFromEngine(ScriptEngine engine) throws ScriptException
{
engine.eval!!("sayHello('world!')");
}
/**
* Invocable 인터페이스를 사용하여 Script함수를 호출한다.
* @param engine
* @throws ScriptException
* @throws NoSuchMethodException
*/
private static void invokeScriptFunctionFromJava(ScriptEngine engine) throws ScriptException, NoSuchMethodException
{
Invocable invocableEngine = (Invocable)engine;
invocableEngine.invokeFunction("sayHello", "from java");
}
/**
* JavaScript에서 Java함수를 호출한다.
* @param engine
* @throws ScriptException
*/
private static void invokeJavaFromScriptFunction(ScriptEngine engine) throws ScriptException
{
engine.put("helloScriptingWorld", new HelloScriptingWorld());
engine.eval!!(
"println('Invoking getHelloReply method from JavaScript...');" +
"var msg = helloScriptingWorld.getHelloReply('vJavaScript');" +
"println('java returned: ' + msg)"
);
}
public String getHelloReply(String name)
{
return "Java method getHelloReply says, 'Hello, " + name + "'";
}
}
Hello from JavaScript
Hello, world!
Hello, from java
Invoking getHelloReply method from JavaScript...
java returned: Java method getHelloReply says, 'Hello, vJavaScript'
'IT_Programming > Java' 카테고리의 다른 글
JavaDoc 유틸리티 (0) | 2010.03.15 |
---|---|
Finalize Guardian Idiom (0) | 2010.02.25 |
XML 문서에 Binary Data를 Insert하는 방법 (0) | 2010.02.05 |
JDOM (The Java DOM) (0) | 2010.02.02 |
Painting in AWT and Swing - 반복적 repaint() 호출 이슈! (0) | 2010.01.19 |