[JAVA] JFreeChart를 활용해서 서블릿에서 그래프를 그리기

JFreeChart를 활용해서 서블릿에서 그래프를 그려봅시다.
[자바팁 연재-3]JFreeChart를 활용해서 서블릿에서 그래프를 그려봅시다.

JFeeChart는 챠트 그림을 만드는데 특화한 고기능 라이브러리입니다. 물론, J2SE에는 Java2D라는 그림
생성용의 API가 준비되어 있으므로, JFeeChart같은 라이브러리를 쓰지않고 써도 최소한 그림을 그리는 정도는
가능합니다만, 기둥그래프같은 비교적 간단한 챠트를 만들기에도, 우선 좌표의 계산등의 세밀한 계산이나
번잡한 코딩를 해야만 합니다.

그러나, JFreeChart를 사용하는 것으로, 그래프의 기본이 되는 데이터 세트를 넘겨주는 것만으로,
기둥그래프나 원 그래프, 버블 챠트, 레이다 챠트, 주식차트 같은 여러가지 챠트를, 간단히 작성할 수
있습니다. 기본적인 그림그리기는 전부 JFeeChart가 대신해 주니까, 프로그래머는 좌표계산 같은 저 레벨의
부분에 신경 쓰지 않아도 됩니다. 또, 예를 들어, 한번 작성한 챠트를 기둥챠트로 부터 둥근챠트에 변환하고
싶다고 생각한 경우에도 , 클래스나 메소드를 바꿔 넣기 만 하면 되기 때문에, 비교적 간단히 바꿀 수 있습니다.
여러분도 이번 기회에 비주얼 챠트를 사용해서 효과적인 페이지를 작성해 보세요.

■해설
(1)JFreeChart라이브러리를 인스톨 합니다.
JFreeChart를 이용하기에 앞서, 우선 라이브러리를 인스톨해야만 합니다. JFreeChart라이브러리는,
아래의 사이트에서 받습니다.

http://www.jfree.org/jfreechart/

다운로드파일 jfreechart-X.X.X.zip(X는 버전)을 풀면, 여러가자 파일이 나옵니다.
그중에서 jfreechart-X.X.X.jar, jcommon-X.X.X.jar를 어플리케이션 밑의 /WEB-INF/lib 폴더에 복사해 주세요.

(2)서블릿 클래스를 정의합니다.
이번에는, 우선 클래스 내부에 지정한 배열값으로, 원 그래프를 작성해 보는 것으로 합니다.
당연히, 배열값을 얻어오는 장소는, 일반적으로 DB등으로 부터 값을 얻어 옵니다.

ChartServlet.java

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;

public class ChartServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 그래프 생성용 데이터를 준비합니다.
String[][] aryDat =
{
{"A", "3000" },
{"B", "10000"},
{"C", "15000"},
{"D", "3500" },
{"E", "4500" }
};
// 원 그래프를 기본으로 하는 데이터 셋트를 준비합니다.
DefaultPieDataset objDpd=new DefaultPieDataset();
// 데이타 셋트에 항목명과 값을 순서대로 넣습니다.
for(int i=0;i[aryDat.length;i++){
objDpd.setValue(aryDat[i][0],Integer.parseInt(aryDat[i][1]));
}
// 3차원 원 그래프를 생성( 첫번째 인수로 부터 그래프 타이틀,
// 데이터 셋트, 판례를 지정 할까, 도구 타이프를 표시할까,
// URL을 동적으로 생성할까를 지정합니다.)
JFreeChart objCht=ChartFactory.createPieChart3D(
"ABCDE....",objDpd,true,false,false);
// 바이너리 출력 스트림에 JPEG형식으로 그래프를 출력 (600×400픽셀)
response.setContentType("image/jpeg");
ServletOutputStream objSos=response.getOutputStream();
ChartUtilities.writeChartAsJPEG(objSos,objCht,600,400);
}
}

(3)디플로이 디스크립터에 서블릿 클래스 등록합시다.
여기서 만든 서블릿 클래스를 실행하기에 앞서, 미리 디플로이 디스크립터에 대해, 서블릿의 등록을 할
필요가 있습니다. [url-pattern]요소에 /chart.jpg 같이 지정하는 것으로, 서블릿 클래스를 마치 동적인
JPEG파일 인것 처럼 보여주는 것도 할 수 있습니다.

web.xml
[?xml version="1.0" encoding="UTF-8" ?]
[web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-app_2_4.xsd"
version="2.4"]
…중략…
[servlet]
[servlet-name]ChartServlet[/servlet-name]
[servlet-class]ChartServlet[/servlet-class]
[/servlet]
[servlet-mapping]
[servlet-name]ChartServlet[/servlet-name]
[url-pattern]/chart.jpg[/url-pattern]
[/servlet-mapping]
…중략…
[/web-app]

이 코드의 실행 결과는, 제일 처음 그림처럼 됩니다.

로직의 상세한 흐름에 대해서는, 코드 내의 주석을 참조로, 여기서는 JFreeChart를 이용해서 코딩의 간략한 흐름을
파악해 주세요.

1. 데이타 세트의 생성(빨간 부분)
2. 챠트의 생성(보라색 부분)
3. JPEG그림으로 클라이언트에 출력(녹색 부분)

이것은, 원 그래프이외의 차트를 만드는 경우에도 공통적인 흐름입니다. 이 흐름을 이해하고 있으면,
나중에 이용하는 클래스를 바꿔 넣는 것만으로, 여러가지 챠트를 만들수 있습니다. JFreeChart라이브러리에
속하는 여러가지 클래스의 대해서는 아래를 참조 해주세요..

http://www.jfree.org/jfreechart/javadoc/

출처:http://www.atmarkit.co.jp/fjava/javatips/092jspservlet036.html

댓글

이 블로그의 인기 게시물

[MSSQL] 데이터베이스가 사용 중이어서 배타적으로 액서스할 수 없습니다

[LINUX] CentOS 부팅시 오류 : UNEXPECTED INCONSISTENCY; RUN fsck MANUALLY

구글코랩) 안전Dream 실종아동 등 검색 오픈API 소스를 공유합니다. (구글드라이브연동, 이미지 수집 소스)