2009-11-30 6 views
0

JavaScript로 Rhino 1.7에서 스크립트를 작성했습니다. 그 중 하나는 최소 http 서버를 시작하고 JS 명령을 입력으로받습니다. 나는 (코뿔소 내에서) 호출하면스크립트에서 자바 스크립트 인터프리터 호출

이제 :

engine = ScriptEngineManager().getEngineByName("JavaScript"); 

내가 (자바 1.6) 내장 JS 엔진을 얻을, 그 코뿔소의 이전 버전이며, 대한 JavaAdapter에 (같은 일부 기능이 부족 다중 인터페이스).

대신 어떻게 Rhino 엔진을 얻을 수 있습니까? ScriptEngineManager.getEngineFactories()가 필요합니까, 아니면 그 밖에?

+0

중복에 대해 유감 스럽지만 : "engine = ScriptEngineManager() ..."가 JS에서 호출입니까? Rhino 1.7에서 실행되고 있지만 Rhino 대신 기본 Java 6 JS 스크립트 엔진을 반환합니까? 왜 JS 내부에 새로운 스크립트 엔진이 필요합니까? 또는 현재 엔진을 얻으려고합니까/JS 내부의 현재 엔진에 대한 참조가 필요한 이유는 무엇입니까? –

+0

예. eval()을 사용하지 않으려면 다른 인터프리터를 시작하는 스크립트가 필요합니다. 첫 번째 스크립트는 HTTP 양식을 포함하는 단일 페이지를 제공하는 HTTP 서버를 시작합니다. POST 메서드는 서버에 명령 또는 파일 이름을 보내고 서버 측 스크립트는 코드를 실행합니다. –

답변

1

나는 그것을 (시행 착오) 직접 발견했다. 위에서 언급 한 것처럼 Rhino는 엔진 공장을 등록하지 않습니다. 이러한 개체와

cx = Context.getCurrentContext(); 
scope = new ImporterTopLevel(cx); 

내 스크립트 나 evalString/evalReader를 사용하여 명령 줄을 실행할 수 있습니다 (컨텍스트로와 스크립트 객체) 현재의 엔진을 얻을 수 있습니다.

0

초기 스크립트를 호출하기 전에 스크립트에서 컨텍스트 변수로 사용하는 엔진을 설정하지 않으시겠습니까? 그렇게하면 스크립트 내에서 실행중인 엔진에 액세스 할 수 있습니다.

+0

내가 무슨 뜻인지 잘 모르겠다. 그러나 : 자바 스크립트 엔진을 실행하는 Java 코드를 변경하면 피하려고합니다 (그렇지 않으면 Java에서 전체 http-server 것을 구현할 것입니다). –

1

원하는 것은 "JavaScript"를 구현하는 특정 버전의 스크립트 엔진을 선택하는 것입니다. 올바른 방법은 ScriptEngineManager.getEngineFactories()으로 전화 한 다음 getLanguageName()getEngineVersion()의 결과를 확인하는 것입니다.

+0

이미 했었지만 Rhino는 엔진 공장을 등록하지 않았습니다. –

관련 문제