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();
        }
    }
}
 
 
 
 
번호 제목 글쓴이 날짜 조회 수
331 ajax 로 post 데이터를 servlet 으로 전달 받기 (with nexacro) [1] secret 황제낙엽 2023.02.26 0
330 구글 클라우드 비전 API 사용하기 (Google Cloud Vision API) 황제낙엽 2023.02.22 8
329 람다식(Lambda Expressions in Java) file 황제낙엽 2022.12.03 2
328 ConcurrentLinkedQueue와 LinkedBlockingQueue 황제낙엽 2022.04.06 17
327 java.util.Queue file 황제낙엽 2022.04.06 5381
326 숫자형 클래스 BigInterger (int, long 범위 초과) 황제낙엽 2022.01.16 368
325 LocalDate.now() 오늘 날짜 황제낙엽 2022.01.16 7
324 HttpServletRequest, HttpServletResponse, JSONObject, POST 황제낙엽 2022.01.12 31
323 [java.lang.ProcessBuilder] “매개변수가 틀립니다” 혹은 ”Cannot run program” 황제낙엽 2021.10.15 191
322 특정 경로에서 쉘 명령어 실행하기 (ProcessBuilder) 황제낙엽 2021.10.08 54
321 HP-UX, IBM-AIX 황제낙엽 2021.06.23 55
320 nashorn ScriptEninge Test Project (war) file 황제낙엽 2021.05.19 157
319 람다(Lambda)와 함수형 인터페이스 황제낙엽 2021.05.10 19
» javax.script.ScriptEngine 관련 참고사항 (sample java 포함) 황제낙엽 2021.05.09 463
317 Java Scripting API: GraalVM 적용해보기 황제낙엽 2021.05.09 23
316 Java Scripting API: 바인딩과 스크립트 컨텍스트 그리고 실행 성능 개선 file 황제낙엽 2021.05.09 15
315 Java Scripting API: 자바에서 자바스크립트의 함수를 호출할 수 있을까? file 황제낙엽 2021.05.09 345
314 Java에서 Nashorn JavaScript 엔진 사용 file 황제낙엽 2021.05.09 230
313 [JSP] 파일 다운로드 테스트 file 황제낙엽 2021.04.12 123
312 ResultSet 을 순회하기 전에 사이즈 구하기 황제낙엽 2021.01.14 28