2000年3月30日星期四

JFreeChart

web.xml
<servlet>
    <servlet-name>ChartServlet</servlet-name>
    <servlet-class>request.requestMstRegist.test.ChartServlet</servlet-class>
 </servlet>
 <servlet-mapping>
   <servlet-name>ChartServlet</servlet-name>
   <url-pattern>/servlet/Chart</url-pattern>
 </servlet-mapping>

ChartServlet
package request.requestMstRegist.test;

import java.io.IOException;

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

public class ChartServlet extends HttpServlet {
 private static final long serialVersionUID = 1L;

 public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  RequestDispatcher dispatcher = request.getRequestDispatcher("../temp/chart.jsp");
  dispatcher.forward(request, response);
 }

 public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  doGet(request, response);
 }
}


chart.jsp
<%@page contentType="text/html; charset=UTF-8" %>

<jsp:useBean id="chart" class="request.requestMstRegist.test.Chart"/>

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>JSP Page</title>
</head>
<body>

<table>
<tr><td align="center" width="1200"><h1>Chart.jsp</h1></td></tr>
<tr><td align="center"><img src="<%=  "../temp/" + chart.getBarChartName() %>" alt="test image" usemap="#test" border="0"/></td></tr>
<tr><td align="center"><img src="<%=  "../temp/" + chart.getLineChartName() %>" alt="test image" usemap="#test" border="0"/></td></tr>
</table>

</body>
</html>

Chart.java
package request.requestMstRegist.test;

import java.io.File;
import java.io.IOException;

import javax.servlet.http.HttpSession;

import org.jfree.chart.*;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.DefaultCategoryDataset;

/**
 * 棒グラフのサンプル
 */
public class Chart extends ServletUtilities {
 String barChartName;
 String lineChartName;

 private DefaultCategoryDataset getBarChartDataSet() {
  // 表示するデータの作成
  String series1 = "第一";
  String series2 = "第二";
  String series3 = "第三";
  
  // カテゴリーの設定
  String category1 = "カテゴリー 1";
  String category2 = "カテゴリー 2";
  String category3 = "カテゴリー 3";
  
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();
  
  dataset.addValue(1.0, series1, category1);
  dataset.addValue(4.0, series1, category2);
  dataset.addValue(5.0, series1, category3);

  dataset.addValue(5.0, series2, category1);
  dataset.addValue(7.0, series2, category2);
  dataset.addValue(7.0, series2, category3);

  dataset.addValue(6.0, series3, category1);
  dataset.addValue(8.0, series3, category2);
  dataset.addValue(8.0, series3, category3);
  return dataset;
 }

 private DefaultCategoryDataset getLineChartDataSet() {
  // 表示するデータの作成
  String series1 = "NTTドコモ";
  String series2 = "au";
  String series3 = "ソフトバンク";
  
  // カテゴリーの設定
  String category1 = "7月";
  String category2 = "8月";
  String category3 = "9月";
  String category4 = "10月";
  String category5 = "11月";
  
  // グラフデータを設定する
  DefaultCategoryDataset dataset = new DefaultCategoryDataset();

  dataset.addValue(145100, series1, category1);
  dataset.addValue(125500, series1, category2);
  dataset.addValue(109400, series1, category3);
  dataset.addValue(57700, series1, category4);
  dataset.addValue(88100, series1, category5);

  dataset.addValue(51800, series2, category1);
  dataset.addValue(56600, series2, category2);
  dataset.addValue(914000, series2, category3);
  dataset.addValue(58400, series2, category4);
  dataset.addValue(82300, series2, category5);

  dataset.addValue(279500, series3, category1);
  dataset.addValue(288900, series3, category2);
  dataset.addValue(332600, series3, category3);
  dataset.addValue(324200, series3, category4);
  dataset.addValue(276600, series3, category5);
  return dataset;
 }
 
 public Chart() {
  // 日本語が文字化けしないテーマ
  ChartFactory.setChartTheme(StandardChartTheme.createLegacyTheme());

  try {
   // 棒グラフDataSet****************************************************************
   DefaultCategoryDataset barDS = getBarChartDataSet();

   // 棒グラフのJFreeChartオブジェクトの生成
   JFreeChart barChart = ChartFactory.createBarChart("棒グラフのサンプル", null, "値", barDS, PlotOrientation.VERTICAL, true, true, false);

   // 棒グラフ名設定
   barChartName = saveChartAsPNG(barChart, 500, 500, null);
   
   // 線グラフDataSet****************************************************************
   DefaultCategoryDataset lineDS = getLineChartDataSet();

   // 線グラフのJFreeChartオブジェクトの生成
   JFreeChart lineChart = ChartFactory.createLineChart("純増数", "キャリア", "契約数", lineDS, PlotOrientation.VERTICAL, true, false, false);

   // 線グラフ名設定
   lineChartName = saveChartAsPNG(lineChart, 600, 400, null);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
 
 public static void main(String[] args) {
  new Chart();
 }

 // グラフ名を取得
 public String getBarChartName() {
  return barChartName;
 }
 
 public String getLineChartName() {
  return lineChartName;
 }
 
 /**  ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 共通 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */
 // グラフ保存先作る
 protected static void createTempDir() {
  String tempDirName = System.getProperty("java.io.tmpdir") + "/webapps/veriserve/temp";

  if (tempDirName == null) {
   throw new RuntimeException("Temporary directory system property " + "(java.io.tmpdir) is null.");
  }

  // create the temporary directory if it doesn't exist
  File tempDir = new File(tempDirName);

  if (!tempDir.exists()) {
   tempDir.mkdirs();
  }
 }

 // グラフ保存
 public static String saveChartAsPNG(JFreeChart chart, int width, int height, HttpSession session) throws IOException {
  String imgDir = System.getProperty("java.io.tmpdir") + "/webapps/veriserve/temp";
  
  if (chart == null) {
   throw new IllegalArgumentException("Null 'chart' argument.");
  }
  
  createTempDir();
  
  String prefix = ServletUtilities.getTempFilePrefix();
  
  if (session == null) {
   prefix = ServletUtilities.getTempOneTimeFilePrefix();
  }
  File tempFile = File.createTempFile(prefix, ".png", new File(imgDir));
  
  ChartUtilities.saveChartAsPNG(tempFile, chart, width, height);
  
  if (session != null) {
   ServletUtilities.registerChartForDeletion(tempFile, session);
  }
  return tempFile.getName();
 }
}

没有评论:

发表评论