sitelink1  
sitelink2  
sitelink3  
sitelink4 http://1 
extra_vars4 ko 
extra_vars5 http://azkidev.tistory.com/35 
extra_vars6 sitelink1 

일단 그냥 javascript 자체는 jdk 1.6 부터 ScriptManager 로 그냥 실행 시킬 수 있다. 아래같이 걍 쓰면 된다.

import javax.script.*;

ScriptEngineManager factory = new ScriptEngineManager();
ScriptEngine engine = factory.getEngineByName("JavaScript");
engine.eval("print(1+3);");


그런데 문제점은 기존의 코드를 그대로 돌릴 수 없다는 점. 가장 문제는 window 객체도 없고 document 도 없다. 물론, html 영역도 없으므로 기존의 코드가 브라우저의 내장 객체들을 사용하면 그 코드는 돌아가지 않는다.
그런 객체들을 만들어주는 코드가 바로 env.js 이다. 순수 자바스크립트로 이루어져있는 이 코드는 window 객체부터, document 객체는 물론이고, dom 객체들의 innerHTML 같은 속성까지 구현해놓았다.


그럼 ScriptManager 에 env.js 를 넣고 실행한 후 하면 될 것 같다. 하지만 문제는 또 있다. env.js 는 ScriptManager 가 제공하는 자바스크립트 스펙만으로는 동작하지 않는다. env.js 에는 getter, setter 같은 것이 구현되어 있는데, 그건 ECMA-262 Edition 4 부터 지원되는 것 같다. 아무튼 그냥 jdk 1.6 안에 있는 걸루는 안되니 rhino 를 따로 받아서 해야한다.

env.js 나 js-14.jar 나 그냥 url 로 들어가서 받아도 된다.
아무튼 jar 를 자바빌드패스를 설정해서 넣어주고, 다음과 같이 하면 된다.

import org.mozilla.javascript.Context;
import org.mozilla.javascript.ContextFactory;
import org.mozilla.javascript.Scriptable;

ContextFactory factory = ContextFactory.getGlobal();
Context cx = factory.enterContext();
cx.setOptimizationLevel(-1);// without 64kb limit
Scriptable shared = cx.initStandardObjects();
Scriptable scope = cx.newObject(shared);
cx.evaluateReader(scope, new java.io.FileReader("env.rhino.js"), "", 1, null);
String source ="";
source += "var div = document.createElement("div");";
source += "div.innerHTML = "korea";";
source += "document.body.appendChild(div);";
source += "document.body.innerHTML;";
Object result = cx.evaluateString(scope, source, "", 1, null);
System.out.println(result);//"<div>korea</div>"


번호 제목 글쓴이 날짜 조회 수
157 자바스크립트의 쉬프트 연산자 (Shift Operator) 와 음수 (Negative) 이야기 황제낙엽 2012.05.31 726
156 연산자 (===, ==, >=, <=) 황제낙엽 2012.05.30 47
155 XMLHttpRequest 의 이벤트 onreadystatechange 황제낙엽 2012.05.30 412
154 JavaScript 재입문 황제낙엽 2012.05.29 50
153 진행 상황 추적하기(XMLHttpRequest.readyState) file 황제낙엽 2012.05.23 324
152 JavaScript Touch and Gesture Events iPhone and Android 황제낙엽 2012.04.12 337
151 Javascript ArrayBuffer ? Binary handling in javascript 황제낙엽 2012.03.19 218
150 오류:호출자(서버 응용 프로그램이 아닌 서버)가 사용될 수 없어서 사라졌습니다. file 황제낙엽 2012.03.14 1950
149 Alert 에서의 개행처리 황제낙엽 2012.03.09 80
148 env.js 사용시 부족한 부분 file 황제낙엽 2012.02.15 33
» Rhino 와 env.js 를 사용해서 자바 서버에서 javascript 를 구동해보자 file 황제낙엽 2012.02.15 116
146 외부 라이브러리 (.js) 의 바람직하지 않은 동적 로딩 (eval함수 이용) 황제낙엽 2012.01.18 1851
145 IFrames and cross-domain security file 황제낙엽 2012.01.13 246
144 자바스크립트 숫자형 체크 함수 (isFinite() 함수 와 isNaN() 함수) 황제낙엽 2011.12.13 67
143 char to hex string 황제낙엽 2011.11.29 206
142 Understanding delete 황제낙엽 2011.11.28 61
141 JScript Memory Leaks 황제낙엽 2011.11.28 69
140 JavaScript Reserved Words 황제낙엽 2011.11.28 94
139 Reference Count (순환참조) 황제낙엽 2011.11.24 191
138 IE and Memory accumulation in Javascript (document.createElement()) file 황제낙엽 2011.11.24 30