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 block
            e.printStackTrace();
        }
    }
}
 
 
 
 
번호 제목 글쓴이 날짜 조회 수
323 [java.lang.ProcessBuilder] “매개변수가 틀립니다” 혹은 ”Cannot run program” 황제낙엽 2021.10.15 541
322 특정 경로에서 쉘 명령어 실행하기 (ProcessBuilder) 황제낙엽 2021.10.08 408
321 HP-UX, IBM-AIX 황제낙엽 2021.06.23 648
320 nashorn ScriptEninge Test Project (war) file 황제낙엽 2021.05.19 565
319 람다(Lambda)와 함수형 인터페이스 황제낙엽 2021.05.10 569
» javax.script.ScriptEngine 관련 참고사항 (sample java 포함) 황제낙엽 2021.05.09 773
317 Java Scripting API: GraalVM 적용해보기 황제낙엽 2021.05.09 336
316 Java Scripting API: 바인딩과 스크립트 컨텍스트 그리고 실행 성능 개선 file 황제낙엽 2021.05.09 232
315 Java Scripting API: 자바에서 자바스크립트의 함수를 호출할 수 있을까? file 황제낙엽 2021.05.09 689
314 Java에서 Nashorn JavaScript 엔진 사용 file 황제낙엽 2021.05.09 540
313 [JSP] 파일 다운로드 테스트 file 황제낙엽 2021.04.12 3560
312 ResultSet 을 순회하기 전에 사이즈 구하기 황제낙엽 2021.01.14 290
311 ResultSet 의 사이즈로 조회 결과가 있는지 확인 황제낙엽 2021.01.14 337
310 지정한 일자보다 하루 뒤로 설정하기 황제낙엽 2021.01.14 297
309 for, while 등의 loop구문에서 sleep하기 황제낙엽 2020.12.04 479
308 미디어 파일의 metadata를 읽자 (metadata-extractor) file 황제낙엽 2020.08.30 1047
307 [HttpURLConnection] Authorization 헤더를 넣어 GET Request 황제낙엽 2020.08.12 1062
306 직접 작성한 PropertiesUtil.java 황제낙엽 2020.07.21 546
305 [Online Book] manning사의 making java groovy 황제낙엽 2020.06.19 770
304 자바(JAVA) 어노테이션(Annotation) 황제낙엽 2020.04.10 392