개요
java 를 이용해서 아래와 같이 Web Viewer 를 띄워 보도록 하겠습니다.
라이브러리 추가
java를 이용해서 web viewer를 띄우기 위해서는 jfxrt.jar 라이브러리가 필요합니다.
jxrt.jar 는 이미 JDK 를 설치 했으면, 아래 경로에서 찾을 수 있습니다.
C:\Program Files\Java\jdk1.8.0_261\jre\lib\ext
해당 라이브러리를 이클립스에서 추가를 합니다. 추가하는 개괄적인 방법은 아래와 같습니다.
프로젝트 속성 (프로젝트 선택후에 우클릭-속성) 에서
- 좌측에서 Java Build Path 선택
- 가운데에서 Libraries 탭을 선택
- 우측에서 Add External JARs... 선택합니다
프레임 만들기
웹 뷰어가 뜰 수 있도록 적절하게 Frame 을 만들어 줍시다.
일반적으로 JFrame 을 이용해서 만들었고, layout 을 null 으로 세팅을 해주고, location 을 직접 지정해줍니다. JFxPanel 은 Layout 이 정상적으로 안먹혀서 아래와 같이 location 을 직접 지정해 주어야 합니다.
실제 웹 뷰가 뜨는 initFx 함수를 JavaFx - Thread 에서 수행 할 수 있도록 runlater 으로 Thread 화 합니다.
private void webviewer() {
// This method is invoked on Swing thread
JFrame frame = new JFrame("Web Viewer");
final JFXPanel fxPanel = new JFXPanel();
fxPanel.setSize(new Dimension(960, 420));
frame.getContentPane().setLayout(null);
fxPanel.setSize(new Dimension(960, 420));
fxPanel.setLocation(new Point(0, 0));
frame.add(fxPanel);
frame.getContentPane().setPreferredSize(new Dimension(960, 420));
frame.pack();
frame.setResizable(false);
frame.setVisible(true);
Platform.runLater(new Runnable() { // this will run initFX as JavaFX-Thread
@Override
public void run() {
initFX(fxPanel);
}
});
}
initFX
아래와 같이 iniFx 함수를 구현한다. fxPanel 에 scene 을 지정하고, 해당 Scene 하위 그룹으로 WebView 객체를 할당하는 방식으로 동작한다.
private void initFX(final JFXPanel fxPanel) {
Group group = new Group();
Scene scene = new Scene(group);
fxPanel.setScene(scene);
WebView webView = new WebView();
group.getChildren().add(webView);
webView.setMinSize(960, 420);
webView.setMaxSize(960, 420);
WebEngine webEngine = webView.getEngine();
webEngine.load("http://www.google.com/");
}
구글은 뜨는데. 티스토리는 안뜨네?
webEngine 에서 url 를 load를 하게되는데, "http://www.google.com/" 는 정상적으로 표시가 되는데, "https://coinpipe.tistory.com/111" 은 정상적으로 출력이 안되는 문제점이 발견되었다.
차이점을 보니, http 와 https 의 차이점이였다.
https 에 접근 하기 위해서는 SSL 인증서가 필요하는데, 여기서는 간단하게 SSL 인증서 없이 https 통신하는 구문을 추가하여 인증서 없이 https에 접근할 수 있도록 해보자.
아래와 같이 SSL 관련 보안 예외처리를 해주어야, https 사이트를 정상 접근할 수 있다.
아래 구문을 webEngine 객체 생성부분과 webEngin.load 사이에 추가 하자.
WebEngine webEngine = webView.getEngine();
TrustManager[] trustAllCerts = new TrustManager[] { new X509TrustManager() {
public java.security.cert.X509Certificate[] getAcceptedIssuers() {
return null;
}
public void checkClientTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
public void checkServerTrusted(java.security.cert.X509Certificate[] certs, String authType) {
}
} };
try {
SSLContext sc = SSLContext.getInstance("SSL");
sc.init(null, trustAllCerts, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory());
} catch (GeneralSecurityException e) {
}
webEngine.load("https://coinpipe.tistory.com/111");
맺으며
Java를 통해서 웹 뷰를 띄우고 싶으면, jfxrt 라이브러리를 활용하자.
'IT > Java & Kotlin' 카테고리의 다른 글
Kotlin과 Java: 함수 매개변수의 불변성 (0) | 2024.05.22 |
---|---|
코틀린 Property (속성) : 데이터 캡슐화의 간편한 방법 (3) | 2024.04.19 |
Jetpack Compose에서 상태 관리하기: remember와 mutableStateOf (0) | 2024.04.17 |
[Kotlin] 1급 시민 함수(first-class citizen)란? (0) | 2024.04.03 |
JDOM XML Parsing - JAVA (4) | 2021.07.19 |
댓글