2009-05-19 13 views
9

Oto moja sytuacja:Jak załadować pliki .js do kontekstu Rhino w Javie

Mam dostęp do obiektu kontekstu Rhino w klasie Java. Chcę przeczytać w kilku plikach .js i przekazać je do kontekstu Rhino, aby je ocenić. Nie jestem tak naprawdę zainteresowany posiadaniem funkcji w plikach .js dostępnych w kontekście skryptowym tak bardzo, jak tylko mam zmienne zadeklarowane w dostępnych plikach .js (jest to rodzaj problemu sprawdzania poprawności narzędzi).

Idealnie byłoby przeczytać i spróbować ocenić każdy plik na raz, nie linia po linii. Zauważyłem, że istnieje metoda w kontekście (patrz Rhino API) o nazwie evaluateReader(). Moim pierwszym przypuszczeniem jest to, że powinienem pobrać wszystkie pliki, które chcę załadować, przejrzeć je wszystkie i nazwać tą metodą, przekazując jakiś rodzaj obiektu dla każdego z nich, i świetnie, teraz wszystkie są w moim kontekście skryptowym.

Zakładając, że jestem na dobrej drodze, czy ktoś może mi powiedzieć, czy istnieją jakieś dobre praktyki do zastosowania w przypadku używania plików .js w kontekście skryptów Java, lub jeśli jest lepszy sposób na zrobienie tego, lub zrobiłeś to w inny sposób, itd.?

Nie szukam tu szczegółów implementacji, tylko opinie innych osób, które mogły to zrobić już w niektórych swoich kodach. Przesyłanie wiadomości za pomocą języków skryptowych z Java jest dla mnie nowością.

Odpowiedz

12

Czy zdajesz sobie sprawę, że Rhino ships in Java 6?

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); 

Jeśli chcesz używać go z Java 5, musisz download API oddzielnie. Możesz uzyskać silniki dla wielu popularnych języków skryptowych z scripting.dev.java.net.

+0

"Można uzyskać silniki dla wielu popularnych języków skryptowych z scripting.dev.java.net." Nie, już nie możemy. Wiem, że to jest bardzo stare, ale czy jest jakiś nowy link, którego powinniśmy użyć? – hexafraction

+0

@hexafraction Wypróbuj to pytanie: http://stackoverflow.com/questions/11838369/where-can-i-find-a-list-of-available-jsr-223-scripting-languages ​​ – McDowell

+0

+1 Dzięki, że i archiwum internetowe ma [pomógł] (http://web.archive.org/web/20070610234337/https://scripting.dev.java.net/), ponieważ to ostatnie jest tylko workiem z linkami. – hexafraction

Powiązane problemy