sitelink1 | |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
sitelink5 | |
sitelink6 |
* ScriptEngine은 오라클 자바 7에서는 Rhino이고 오라클 자바 8버전 이후부터는 “JavaScript”로 입력해도 되는데 기본 스크립트 엔진이 Nashorn (ECMAScript-262 5.1)
> ScriptEngine engine = manager.getEngineByName("nashorn");
> OpenJDK 에서는 1.8 과 11 버전에서도 Nashorn 으로 동작한다
> OpenJDK 11버전으로 실행하면 다음과 같은 warning이 뜸 - Warning: Nashorn engine is planned to be removed from a future JDK release
* Nashorn 엔진도 자바 11버전부터는 Deprecated
* Nashorn의 호환모드는 기본동작과 다르게 동작할 수 있다
* Nashorn의 호환모드는 java코드와 script가 혼재되어 스타일이나 일관성이 떨어진다
* Nashorn의 호환모드는 성능 저하도 발생
* Nashorn의 호환모드는 java에서 script 객체에 직접 접근이 가능(보안 이슈 발생)
* Nashorn의 대안으로 Java VM의 일종인 GraalVM 모듈이 가이드 되고 있음 (Java와 javascript 등의 언어를 함께 지원함)
현재 실행중인 ScriptEngine 의 정보를 출력하는 예제
import java.util.List;import java.util.stream.Collectors;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineFactory;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class TestScriptEngine {public static void main(String args[]) {ScriptEngineManager manager = new ScriptEngineManager();List<ScriptEngineFactory> engineFactories = manager.getEngineFactories();for (ScriptEngineFactory factory : engineFactories) {System.out.println("engine name: " + factory.getEngineName());System.out.println("engine version: " + factory.getEngineVersion());String extensions = factory.getExtensions().stream().collect(Collectors.joining(", "));System.out.println("extensions: " + extensions);System.out.println("language name: " + factory.getLanguageName());System.out.println("language version: " + factory.getLanguageVersion());String mimeTypes = factory.getMimeTypes().stream().collect(Collectors.joining(", "));System.out.println("mimeTypes: " + mimeTypes);String shortNames = factory.getNames().stream().collect(Collectors.joining(", "));System.out.println("shortNames :" + shortNames);String[] params = { ScriptEngine.NAME, ScriptEngine.ENGINE, ScriptEngine.ENGINE_VERSION,ScriptEngine.LANGUAGE, ScriptEngine.LANGUAGE_VERSION };for (String param : params) {System.out.printf("parameter '%s': %s\n", param, factory.getParameter(param));}System.out.println("---------------");}ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn");try {if(!(engine instanceof Invocable)) {System.out.println("Invocable 인터페이스 사용 불가");} else {System.out.println("Invocable 인터페이스 사용 가능");}System.out.println("---------------");engine.eval("print('Hello World');");} catch (ScriptException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}
댓글 0
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
9 |
nashorn ScriptEninge Test Project (war)
![]() | 황제낙엽 | 2021.05.19 | 565 |
» | javax.script.ScriptEngine 관련 참고사항 (sample java 포함) | 황제낙엽 | 2021.05.09 | 773 |
7 | Java Scripting API: GraalVM 적용해보기 | 황제낙엽 | 2021.05.09 | 336 |
6 |
Java Scripting API: 바인딩과 스크립트 컨텍스트 그리고 실행 성능 개선
![]() | 황제낙엽 | 2021.05.09 | 232 |
5 |
Java Scripting API: 자바에서 자바스크립트의 함수를 호출할 수 있을까?
![]() | 황제낙엽 | 2021.05.09 | 689 |
4 |
Java에서 Nashorn JavaScript 엔진 사용
![]() | 황제낙엽 | 2021.05.09 | 540 |
3 |
PreProcess 실행 (전처리기 만들기)
![]() | 황제낙엽 | 2012.01.04 | 478 |
2 | javax.script와 타입변환 | 황제낙엽 | 2012.01.03 | 430 |
1 | Scripting within Java | 황제낙엽 | 2012.01.03 | 393 |