2009-05-19 5 views
9

에 코뿔소 컨텍스트에 .js 파일로드 :어떻게 여기 내 상황이 자바

나는 자바 클래스에서 코뿔소 Context 객체에 액세스 할 수 있습니다. 여러 개의 .js 파일을 읽고 Rhino 컨텍스트로 전달하여 평가를 받고 싶습니다. 저는 .js 파일에서 사용할 수있는 변수를 사용하는 것만 큼 스크립팅 컨텍스트에서 사용할 수있는 .js 파일의 기능을 사용하는 데 관심이 없습니다 (도구 검증 유효성 검사).

이상적으로는 한 줄에 한 줄씩 읽어 들이고 각 파일을 한꺼번에 평가하려고합니다. Context (Rhino API 참조)에 evaluateReader()이라는 메서드가 있음을 발견했습니다. 내 첫 번째 추측은로드하고 싶은 파일을 모두 가져 와서 모두 살펴보고이 메서드를 각기 다른 독자 개체로 전달하는 것입니다. 그러면 훌륭한 스크립트가 모든 스크립팅 컨텍스트에 포함됩니다.

그래서 올바른 위치에 있다고 가정하면 Java 스크립팅 컨텍스트에서 .js 파일을 사용하기 위해 따라야 할 우수 사례가 있는지 또는 더 나은 방법이 있는지, 또는 다른 방법으로 한거야?

구현 세부 정보는 여기에서 찾고 있지 않습니다. 이미 일부 코드에서이 작업을 수행 한 다른 사람들로부터의 피드백 만 있습니다. Java의 스크립팅 언어를 사용하는 것은 저에게 새로운 것입니다.

답변

12

당신은 Rhino ships in Java 6을 알고 있습니까? 자바 5를 사용하려면

String javaScriptExpression = "sayHello(name);"; 
Reader javaScriptFile = new StringReader(
    "function sayHello(name) {\n" 
     + " println('Hello, '+name+'!');\n" + "}"); 

ScriptEngineManager factory = new ScriptEngineManager(); 
ScriptEngine engine = factory 
    .getEngineByName("JavaScript"); 
ScriptContext context = engine.getContext(); 
context.setAttribute("name", "JavaScript", 
    ScriptContext.ENGINE_SCOPE); 

engine.eval(javaScriptFile); 
engine.eval(javaScriptExpression); 

, 당신은 API 별도로 download해야합니다. scripting.dev.java.net에서 많은 인기 스크립팅 언어 엔진을 사용할 수 있습니다.

+0

"많은 유명한 스크립팅 언어에 대한 엔진을 scripting.dev.java.net에서 구할 수 있습니다." 아니, 더 이상 할 수 없어. 나는 이것이 상당히 오래된 것임을 알고 있지만, 우리가 사용해야하는 새로운 링크가 있습니까? – hexafraction

+0

@hexafraction이 질문을보십시오. http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages ​​ – McDowell

+0

+1 감사합니다. 후자는 단지 링크의 가방이기 때문에 웹 아카이브는 [도움] (http://web.archive.org/web/20070610234337/https://scripting.dev.java.net/) 있습니다. – hexafraction