본문 바로가기
study/Java

[Jsoup] 27. 수출입은행 데이터에서 KRW, EUR, JPY(100), CNH, USD 데이터만 출력하기 (exam1.jsp)

by 금이패런츠 2022. 5. 20.
728x90
반응형

exam1.jsp

<%@page import="org.jsoup.nodes.Element"%>
<%@page import="org.jsoup.select.Elements"%>
<%@page import="org.jsoup.Jsoup"%>
<%@page import="java.io.IOException"%>
<%@page import="org.jsoup.nodes.Document"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Arrays"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- /jsoup1/src/main/webapp/exam1.jsp --%> 
<%--
	KRW, EUR, JPY(100), CNH, USD 데이터만 출력하기
 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>수출입은행 데이터에서 KRW, EUR, JPY(100), CNH, USD 데이터만 출력하기</title>
</head>
<body>
<%
	String url = "http://www.koreaexim.go.kr/wg/HPHKWG057M01";
	Document doc = null;
	List<List<String>> trlist = new ArrayList<List<String>>();
	List<String> title = Arrays.asList("전신환받으실때","전신환보내실때","매매기준율","장부가격","중개매매기준율","중개장부가격");
	try {
		doc = Jsoup.connect(url).get(); //환율 정보를 보여주는 페이지의 html 데이터 수신
		Elements trs = doc.select("tr"); //tr 태그들 목록
		for(Element tr : trs) {
			//tr : tr 태그 한개
			List<String> tdlist = new ArrayList<String>();
			Elements tds = tr.select("td"); //tr 태그의 하위 태그 중 td 태그들 목록
			for(Element td : tds) {
				tdlist.add(td.html());
			}
			if(tdlist.size() > 0) {
				if(tdlist.get(0).equals("KRW") || tdlist.get(0).equals("EUR") || 
				tdlist.get(0).equals("JPY(100)") || tdlist.get(0).equals("CNH") || 
				tdlist.get(0).equals("USD"))
				trlist.add(tdlist);
			}
		}
	} catch(IOException e) {
		e.printStackTrace();
	}
	pageContext.setAttribute("trlist", trlist); //JSTL 사용을 위해 속성 등록
	pageContext.setAttribute("title", title); //JSTL 사용을 위해 속성 등록
%>
<table>
	<c:forEach items="${trlist}" var="tdlist">
		<c:forEach items="${tdlist}" var="td" varStatus="stat">
			<c:choose>
				<c:when test="${stat.index % 8 == 0}"> <%-- 통화코드. tdlist의 첫번째 요소 --%>
						<tr>
							<td rowspan="6">${td}</td>
				</c:when>
				<c:when test="${stat.index % 8 == 1}"> <%-- 통화명. tdlist의 두번째 요소 --%>
						<td rowspan="6">${td}</td>
				</c:when>
				<c:when test="${stat.index % 8 == 2}"> <%-- 통화코드 시작 tdlist의 세번째 요소 --%>
						<td>${title[0]}</td> <%-- <%= title.get(0) %> : jstl에서는 List 객체를 첨자(인덱스) 사용이 가능함 --%>
						<td>${td}</td>
						</tr>
				</c:when>
				<c:otherwise>
					<tr>
						<td>${title[stat.index - 2]}</td>
						<td>${td}</td>
					</tr>
				</c:otherwise>
			</c:choose>
		</c:forEach>
	</c:forEach>
</table>
</body>
</html>
728x90
반응형