1. Trouble
Java8의 JVM 환경에서 동작하는 JavaFX의 WebView에서는 Axios, fetch, Ajax 등의 기능을 제한적으로만 사용할 수 있어 Http Body를 넣을 수 없다
2. Root cause
- JavaFX의 WebView에서 제공하는 javascript 런타임 엔진은 JVM에 있다. 그리고 java 8버전의 javascript 런타임 엔진은 'Nashorn'이다.
- 문제는, Nashorn은 순수한 ES5.1 스펙(ECMAScript)을 구현한 순수 javascript 엔진이라는 점이다. 그렇기 때문에 Axios (ES6에 도입된 Promise 기반), fetch (ES6부터 내장 라이브러리), Ajax(XMLHttpRequest 기반이며 순수 javascript가 아님) 셋 다 각각의 이유로 제한적으로만 사용할 수 있다. 제한된 기능 중 하나가 Body를 넣지 못하는 것이다.
- Axios에서는 data 속성에, fetch에서는 body 속성에 각각넣을 수 있으나 Spring API 메서드에서 파라미터로 HttpServletRequest를 받은 후 request.getinputStream()을 이용해 body를 읽어보면 아무런 값이 들어오지 않는 것을 알 수 있다.
- *Reference
https://blog.codecentric.de/project-nashorn-javascript-jvm-polyglott
-> Nashorn is only a Java Script Engine 부분 볼 것
3. Shooting
userAgent를 통해 JavaFX일 경우 console.log로 simui에 log Fileld를 전달한 후, simui에서 Spring server로 요청을 보낸다
'Back-End > Java' 카테고리의 다른 글
[Java] lombok의 @Builder 사용시 필수 필드를 입력하게 하는 방법 (0) | 2023.03.14 |
---|---|
[Java] Java Array와 Hash의 데이터 접근/삽입 속도 비교 (0) | 2022.03.06 |
[Java] JUnit5 기본 Annotation (0) | 2022.03.03 |
[Java] Process & Thread 개념 (0) | 2022.02.21 |
[Java] Java에서 외부 jar 실행 후 출력되는 결과 가져오기 (0) | 2022.02.15 |