Thursday, October 22, 2009

JavaScript Outside the Browser

Main.java
import javax.script.*;
import java.io.*;

public class ScriptDemo {
 public static void main(String[] args) throws Exception {
  ScriptDemo.runScript( args[0] );
 } 
 
 static void runScript( String fileName ) throws Exception { 
  
  ScriptEngineManager manager = new ScriptEngineManager(); 
  ScriptEngine engine = manager.getEngineByName( "rhino" ); 
  
  SimpleScriptContext context = new SimpleScriptContext();
  SimpleBindings bindings = new SimpleBindings();
  context.setBindings( bindings, SimpleScriptContext.GLOBAL_SCOPE);
  
  FileInputStream fis = new FileInputStream( new File( fileName )); 
  InputStreamReader reader = new InputStreamReader( fis );

  System.out.println( engine.eval( reader ) ); 
 }
}
Person.js
 // functions are objects 
 function fa() {print("foo\n");};
 var so = function () {print("bar\n");};
 fa();
 so(); 
 var la = fa;
 la();
 
 // add an element to the end of an array 
 mylist = ["oats", "peas", "beans"];
 mylist[mylist.length] = "barley";
 
 // print the array - the for loop works differently 
 for (el in mylist) println(mylist[el]);
 
 function Person( name ) {
  this.name = name;
 };
 
 Person.prototype.getName = function() {
  return this.name;
 };
 
 var programmer = new Person( "Greg" ); 
 programmer.getName();
Compile and Run
[greg:ooscript] javac ScriptDemo.java
[greg:ooscript] java ScriptDemo Person.js file:index.html
foo
bar
foo
oats
peas
beans
barley
Greg
[greg:ooscript]