본문 바로가기
IT/JAVA

jfxrt 활용하여, 웹페이지 불러오기

by 큰공 2021. 7. 21.
728x90
반응형

 

개요

 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 라이브러리를 활용하자.

 

 

 

728x90
반응형

'IT > JAVA' 카테고리의 다른 글

JDOM XML Parsing - JAVA  (4) 2021.07.19

댓글