Java Scriptingby Pigbrain

Who is the Java Scripting API For?

  • Scripting language는 다음과 같은 특성을 갖는다
    • Convenience
      • 대부분의 Scripting language는 동적 타입이다
      • 변수의 타입을 선언하지 않고 변수를 정의하고 재사용 할 수 있다
    • Developing rapid prototypes
      • edit-compile-run이 아닌 edit-run 과정으로 빠르게 개발할 수 있다
    • Application extension/customization
      • 어플리케이션의 일부분(configuration scripts, business logic/rules and math expressions for financial applications)을 외부에서 제어하도록 할 수 있다
    • “Command line” shells for applications
  • 자바의 Scripting 기능은 javax.script 패키지에 포함되어 있다
    • ScriptEngineManager 인스턴스를 생성하고 여기서 ScriptEngine인스턴스를 얻은 후 ScriptEngine의 eval 메소드를 통하여 스크립트를 실행한다


Examples

“Hello, World”

  1. import javax.script.*;
  2. public class EvalScript {
  3. public static void main(String[] args) throws Exception {
  4. // ScriptEngineManager 인스턴스 생성
  5. ScriptEngineManager factory = new ScriptEngineManager();
  6. // JavaScript engine 생성
  7. ScriptEngine engine = factory.getEngineByName("JavaScript");
  8. // JavaScript 코드를 실행한다
  9. engine.eval("print('Hello, World')");
  10. }
  11. }

Evaluating a Script File

  1. import javax.script.*;
  2. public class EvalFile {
  3. public static void main(String[] args) throws Exception {
  4. // ScriptEngineManager 인스턴스 생성
  5. ScriptEngineManager factory = new ScriptEngineManager();
  6.  
  7. // JavaScript engine 생성
  8. ScriptEngine engine = factory.getEngineByName("JavaScript");
  9. // 첫번째 argument로 입력 받은 JavaScript 코드가 담긴 파일을 읽어서 를 실행한다
  10. engine.eval(new java.io.FileReader(args[0]));
  11. }
  12. }

Script Variables

  1. import javax.script.*;
  2. public class ScriptVars {
  3. public static void main(String[] args) throws Exception {
  4. ScriptEngine engine = manager.getEngineByName("JavaScript");
  5. File f = new File("test.txt");
  6. // Javascript에서 File 오브젝트를 file변수를 통하여 접근할 수 있다
  7. engine.put("file", f);
  8. engine.eval("print(file.getAbsolutePath())");
  9. }
  10. }

Invoking Script Functions and Methods

  1. import javax.script.*;
  2. public class InvokeScriptFunction {
  3. public static void main(String[] args) throws Exception {
  4. ScriptEngine engine = manager.getEngineByName("JavaScript");
  5. String script = "function hello(name) { print('Hello, ' + name); }";
  6. // Script를 실행한다. hello 함수가 정의된다
  7. engine.eval(script);
  8. // JavaScript engine은 Invocable 인터페이스의 구현체이다
  9. // 다른 engine을 사용하려면 Invocable 타입인지 체크를 해야한다
  10. Invocable inv = (Invocable) engine;
  11. // "Scripting!!"를 파라미터로 셋팅하여 hello 함수를 실행한다
  12. inv.invokeFunction("hello", "Scripting!!" );
  13. }
  14. }
  1. import javax.script.*;
  2. public class InvokeScriptMethod {
  3. public static void main(String[] args) throws Exception {
  4. ScriptEngine engine = manager.getEngineByName("JavaScript");
  5. String script = "var obj = new Object(); obj.hello = function(name) { print('Hello, ' + name); }";
  6. engine.eval(script);interface.
  7. Invocable inv = (Invocable) engine;
  8. Object obj = engine.get("obj");
  9. inv.invokeMethod(obj, "hello", "Script Method !!" );
  10. }
  11. }

Importing Java Packages, Classes

  1. //자바에서 import package.*; 와 같은 형태로 자바 패키지와 클래스들을 import한다
  2. importPackage(java.awt);
  3. // 자바에서 import java.awt.Frame 하는 것과 동일하다
  4. importClass(java.awt.Frame);
  5.  
  6. // 새로운 객체를 생성한다
  7. var frame = new java.awt.Frame("hello");
  8. // JavaScript에서 Frame 객체의 public 메소드를 실행한다
  9. frame.setVisible(true);
  10.  
  11. // 자바 객체의 properties에 접근할 수 있다
  12. print(frame.title);

원문

  • http://docs.oracle.com/javase/7/docs/technotes/guides/scripting/programmer_guide/
Published 14 November 2016