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();
        }
    }
}
 
 
 
 
번호 제목 글쓴이 날짜 조회 수
306 nashorn ScriptEninge Test Project (war) file 황제낙엽 2021.05.19 1312
305 람다(Lambda)와 함수형 인터페이스 황제낙엽 2021.05.10 1527
» javax.script.ScriptEngine 관련 참고사항 (sample java 포함) 황제낙엽 2021.05.09 1603
303 Java Scripting API: GraalVM 적용해보기 황제낙엽 2021.05.09 1137
302 Java Scripting API: 바인딩과 스크립트 컨텍스트 그리고 실행 성능 개선 file 황제낙엽 2021.05.09 1075
301 Java Scripting API: 자바에서 자바스크립트의 함수를 호출할 수 있을까? file 황제낙엽 2021.05.09 1514
300 Java에서 Nashorn JavaScript 엔진 사용 file 황제낙엽 2021.05.09 1459
299 [JSP] 파일 다운로드 테스트 file 황제낙엽 2021.04.12 4821
298 ResultSet 을 순회하기 전에 사이즈 구하기 황제낙엽 2021.01.14 1140
297 ResultSet 의 사이즈로 조회 결과가 있는지 확인 황제낙엽 2021.01.14 1188
296 지정한 일자보다 하루 뒤로 설정하기 황제낙엽 2021.01.14 1086
295 for, while 등의 loop구문에서 sleep하기 황제낙엽 2020.12.04 1326
294 미디어 파일의 metadata를 읽자 (metadata-extractor) file 황제낙엽 2020.08.30 2100
293 [HttpURLConnection] Authorization 헤더를 넣어 GET Request 황제낙엽 2020.08.12 2412
292 직접 작성한 PropertiesUtil.java 황제낙엽 2020.07.21 1330
291 [Online Book] manning사의 making java groovy 황제낙엽 2020.06.19 1559
290 자바(JAVA) 어노테이션(Annotation) 황제낙엽 2020.04.10 1052
289 [AWS, 웹 프로젝트] AWS+MySQL+SpringFrameWork5+JAVA8+ React+Gradle+Webpack+GIT+Jenkins file 황제낙엽 2020.04.08 1530
288 Runtime 클래스의 exec() 함수 실행시의 실행 결과 수집 황제낙엽 2020.03.26 1326
287 SQLite JDBC Driver 황제낙엽 2020.02.25 23755