본문 바로가기
Spring/study

spring 12강 Google Chart, JFree Chart

by avvin 2019. 6. 26.

spring 12강 Google Chart, JFree Chart



예제 실습)


json만 가지고 차트 만들기, db를 읽어들여 json을 생성해서 차트 그리기,(db연동할땐 cartDAO 이용하기)


JFree Chart로는 이미지파일 형식 / pdf 형식으로 차트 출력하기



Google Chart

https://google-developers.appspot.com/chart/



구글 서버에 값만 남겨주면 차트를 만들어줌



1. pom.xml에 라이브러리 추가


<artifactId>

json-simple

jackson-databind



1
2
3
4
5
6
7
8
9
10
11
<!-- 구글 차트 관련 라이브러리 -->
        <dependency>
            <groupId>com.googlecode.json-simple</groupId>
            <artifactId>json-simple</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.9.4</version>
        </dependency>
cs




1
2
3
4
5
6
7
8
9
10
XML 형식
<person> 
    <name>김철수</name>
    <eamil>kim@gmail.com</email>
    <age>21</age>
</person>
 
 
JSON 형식
{"name":"김철수""eamil":"kim@gmail.com""age":21}
cs



구글차트는 json으로 데이터가 넘어온다.


넘어온 데이터를 파싱 해주기위한 라이브러리가 json-simple 와 jackson-databind

 *파싱 : 적절한 데이터를 찾아주는 작업



구글 차트는 자바스크립트만을 이용, 차트 작성에 필요한 JSON 데이터를 리턴받아 화면에 출력



2. admin_manu.jsp에  차트 메뉴 추가

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<a href="${path}/shop/product/list.do">상품목록</a>
<a href="${path}/shop/product/write.do">상품등록</a>
<a href="${path}/pdf/list.do">PDF</a>
<a href="${path}/chart/chart1.do">구글차트(json)</a>
<a href="${path}/chart/chart2.do">구글차트(db)</a>
<a href="${path}/jchart/chart1.do">JFreeChart(png)</a>
<a href="${path}/jchart/chart2.do">JFreeChart(pdf)</a>
<c:choose>
    <c:when test="${sessionScope.admin_userid == null }">
        <a href="${path}/admin/login.do">관리자 로그인</a>
    </c:when>
    <c:otherwise>
        ${sessionScope.admin_name}님이 로그인중입니다.
        <a href ="${path}/admin/logout.do">로그아웃</a>
    </c:otherwise>
</c:choose>
<hr>
cs



 데이터만 넘길 경우 : @Controller + 메서드에 @RespenseBody OR @RestController

  ( 다음페이지가 아니라 원래 페이지로 넘어옴 )



$ajax를 활용하여 비동기적인 방식으로 데이터 띄우기



[ Spring Framework (Legacy) spring01 프로젝트 뜯어보기 ] 글에서도 "test/doF"에 같은 방법 사용함


view - json - sampleData.json 파일 만들기

json은 따로 제시돼있지 않으므로 일반 file 생성하면서 sampleData.json로 형식 지정



sampleData.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{
"cols":[
 
{"id":"","label":"Topping","pattern":"","type":"string"},
{"id":"","label":"Slices","pattern":"","type":"number"}
],
 
"rows":[
{"c":[{"v":"Mushrooms"},{"v":3}]},
{"c":[{"v":"Onions"},{"v":1}]},
{"c":[{"v":"Olives"},{"v":1}]},
{"c":[{"v":"Zucchini"},{"v":1}]},
{"c":[{"v":"{Pepperoni}"},{"v":2}]}
]
}
cs






*예제 샘플 코드의

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

: 콘텐트 타입 기본 값 설정 가능 



3. chart01.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<%@include file=../include/header.jsp"%>
<!-- 구글 차트 호출을 위한 js(자바스크립트)파일 -->
<script type="text/javascript"
src="http://www.google.com/jsapi"></script>
 
<script>
//구글 차트 라이브러리 로딩
google.load("visualization""1", {
    "packages":["corechart"]
});
//라이브러리 로딩이 완료되면 drawChart 함수 호출
google.setOnLoadCallback(drawChart);
function drawChart(){
    
    //차트 그리기에 필요한 json 데이터 로딩
    var jsonData =$.ajax({
        url: "${path}/json/sampleData.json",
        dataType: "json",
        async: false
    }).reponseText;
    
    //json형식으로 데이터가 담김
    console.log(jsonData)
    
    //json형식으로 데이터로 데이터 테이블 생성
    var data = new google.visualizaton.DataTable(jsonData);
    
    console.log("데이터 테이블 :" +data);
    
    //PieChart, LineChart 등 차트 종류 선택 : ColumnChart
    //"chart_div"는 차트가 그려지는 영역
    var chart = new google.visualization.ColumnChart(
            document.getElementById("chart_div"));
    //차트 위치 지정
    chart.draw(data, {
        title : "차트 예제",
        //curveType :"function",  곡선처리
        width : 600,
        height : 440
    });
}
</script>
</head>
<body>
<%@ include file="../include/admin_menu.jsp" %>
<div id ="chart_div"></div>
<button id ="btn" type="button" onclick="drawChart()">
refresh</button>
</body>
</html>
cs




4. servlet-context.xml에 리소스 매핑 추가


include, images 폴더 리소스 매핑해놨듯이 json폴더도 추가해주면 된다.


<resources location ="/WEB-INF/views/json/" mapping="/json/**" />




장바구니.sql

1
2
3
4
5
select product_name, sum(price * amount) money
from cart c, product p
where c.product_id = p.product_id
proup by product_name
order by product_name;
cs