Java에서 JavaScript호출하기
Posted 2008/05/02 14:25
출처 : IBM Developer works 2007/10/16 - 동적인 언어를 동적으로 호출하기, Part 1 : 자바 스크립팅 API
http://www.ibm.com/developerworks/kr/library/j-javascripting1/index.html?S_TACT=105AGX55&S_CMP=EDU
자세한 설명은 출처를 참고할 것.
모든 DBMS들이 JDBC Interface를 구현하였기 때문에 사용자는 해당 DBMS의 Driver를 로드한 후 JDBC Interface만 보고 일관된 프로그래미을 할 수 있듯이 Java 6.0부터는 스크립팅 패키지를 제공하여 여러가지 동적 스크립트들이 스크립팅 패키지에서 제공하는 인터페이스를 구현하도록 하고 마치 Driver를 Load하듯이 ScriptEngine를 획득하여 그것만 보고 Script들을 호출할 수 있다.
Java는 모든 태스크의 최상의 언어는 아니지만 2006.12월부터 제공하는 스크립팅 패키지를 통해 런타임에 스크립트 언어들의 강력한 장점들을 사용할 수 있게 되었다.
아래는 Java에서 JavaScript언어를 호출하는 예제이다. 자세한 원리는 출처를 통해 알 수 있다.
http://www.ibm.com/developerworks/kr/library/j-javascripting1/index.html?S_TACT=105AGX55&S_CMP=EDU
자세한 설명은 출처를 참고할 것.
모든 DBMS들이 JDBC Interface를 구현하였기 때문에 사용자는 해당 DBMS의 Driver를 로드한 후 JDBC Interface만 보고 일관된 프로그래미을 할 수 있듯이 Java 6.0부터는 스크립팅 패키지를 제공하여 여러가지 동적 스크립트들이 스크립팅 패키지에서 제공하는 인터페이스를 구현하도록 하고 마치 Driver를 Load하듯이 ScriptEngine를 획득하여 그것만 보고 Script들을 호출할 수 있다.
Java는 모든 태스크의 최상의 언어는 아니지만 2006.12월부터 제공하는 스크립팅 패키지를 통해 런타임에 스크립트 언어들의 강력한 장점들을 사용할 수 있게 되었다.
아래는 Java에서 JavaScript언어를 호출하는 예제이다. 자세한 원리는 출처를 통해 알 수 있다.
import javax.script.Invocable;
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 + "'";
}
}
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 + "'";
}
}
Calling invokeHellosSript...
Hello from JavaScript
Hello from JavaScript
Calling defineScriptFunction...
Calling invokeScriptFunctionFromEngine...
Hello, world!
Hello, world!
Calling invokeScriptFunctionFromJava...
Hello, from java
Hello, from java
Calling invokeJavaFromScriptFunction...
Invoking getHelloReply method from JavaScript...
java returned: Java method getHelloReply says, 'Hello, vJavaScript'
Invoking getHelloReply method from JavaScript...
java returned: Java method getHelloReply says, 'Hello, vJavaScript'
'C.S.E > Java' 카테고리의 다른 글
| [Java How To Programming] DrawLineArt , DrawArcArt (0) | 2008/05/17 |
|---|---|
| [Java How To Programming] 5.25 Diamond (0) | 2008/05/17 |
| Java에서 JavaScript호출하기 (0) | 2008/05/02 |
| BigInteger를 사용한 Factorial함수 (0) | 2008/03/11 |
| 자바(Java)의 장점과 단점 (0) | 2008/03/09 |
| 제 9회 한국 자바 개발자 컨퍼런스 이벤트에 참여하세요!! (2) | 2008/02/05 |
- Filed under : C.S.E/Java
- Tag : IBM Developer works, java, javascript, Java에서 JavaScript호출
- Comment Trackback
이올린에 북마크하기