JFreeChart的简单使用

本文介绍了一种使用Java Servlet和JFreeChart库生成产品销售条形图及饼图的方法。通过数据库查询获取产品销量数据,并将其展示为两种图表形式。

1.首先还是需要下载相应组件:

2,在项目中引入以下jar包:

 

3.编写一个sevlet:ProductSalesChart.java

 

package com.ycringfinger.shopping.chart;

import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
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.chart.plot.PlotOrientation;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;

import java.sql.*;
import com.ycringfinger.shopping.util.*;

public class ProductSalesChart extends HttpServlet {

    String generatedPath 
= "";
    
    
private DefaultCategoryDataset categoryDataset = new DefaultCategoryDataset();
    
private DefaultPieDataset pieDataset = new DefaultPieDataset();
    
    
public void init(ServletConfig config) throws ServletException {
        generatedPath 
= config.getInitParameter("generatedpath");
    }

    
    
private void getDataSet() {
        Connection conn 
= null;
        Statement stmt 
= null;
        ResultSet rs 
= null;
        
        
try {
            conn 
= DB.getConnection();
            stmt 
= DB.getStatement(conn);
            String sql 
= "select product.name, sum(pcount) from product join saleitem on (product.id = saleitem.product) group by product.id";
            rs 
= DB.executeQuery(stmt, sql);
            
while(rs.next()) {
                categoryDataset.addValue(rs.getInt(
2), "", rs.getString(1));
                pieDataset.setValue(rs.getString(
1), rs.getInt(1));
            }

        }
 catch (SQLException e) {
            e.printStackTrace();
        }
 finally {
            DB.closeResultSet(rs);
            DB.closeStatement(stmt);
            DB.closeConnection(conn);
        }

    }

    
    
public ProductSalesChart() {
        
super();
    }


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


    
public void doPost(HttpServletRequest request, HttpServletResponse response)
            
throws ServletException, IOException {
        getDataSet();
        
        JFreeChart categoryChart 
= ChartFactory.createBarChart3D(
                
"产品销量图"// 图表标题
                "产品"// 目录轴的显示标签
                "销量"// 数值轴的显示标签
                categoryDataset, // 数据集
                PlotOrientation.VERTICAL, // 图表方向:水平、垂直
                true// 是否显示图例(对于简单的柱状图必须是false)
                false// 是否生成工具
                false // 是否生成URL链接
                );
        
        JFreeChart pieChart 
= ChartFactory.createPieChart(
                
"产品销量图",
                pieDataset, 
                
true// 是否显示图例
                false,
                
false
                );

        

        FileOutputStream category_jpg 
= null;
        FileOutputStream pie_jpg 
= null;
        
        
try {
            category_jpg 
= new FileOutputStream(generatedPath + "productsales.jpg");
            ChartUtilities.writeChartAsJPEG(category_jpg, 
1.0f, categoryChart, 400300null);
            
            pie_jpg 
= new FileOutputStream(generatedPath + "productsales_pie.jpg");
            ChartUtilities.writeChartAsJPEG(pie_jpg, 
1.0f, pieChart, 400300null);
            
            
this.getServletContext().getRequestDispatcher("/admin/showproductsaleschart.jsp").forward(request, response);            
        }
 finally {
            
try {
                pie_jpg.close();
                category_jpg.close();
            }
 catch (Exception e) {
            }

        }

    }


}

 

4.本人的web.xml:(其中还包括FileUpload)

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
    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 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
  
<servlet>
    
<description>FileUpload</description>
    
<display-name>FileUpload</display-name>
    
<servlet-name>FileUpload</servlet-name>
    
<servlet-class>com.ycringfinger.shopping.servlet.FileUpload</servlet-class>
    
<init-param>
        
<param-name>uploadpath</param-name>
        
<param-value>D:/JavaWork/Shopping/WebRoot/images/product/</param-value>
    
</init-param>
  
</servlet>
  
<servlet>
    
<servlet-name>ProductSalesChart</servlet-name>
    
<servlet-class>com.ycringfinger.shopping.chart.ProductSalesChart</servlet-class>
    
<init-param>
        
<param-name>generatedpath</param-name>
        
<param-value>D:/JavaWork/Shopping/WebRoot/images/productsales/</param-value>
    
</init-param>
  
</servlet>

  

  
<servlet-mapping>
    
<servlet-name>FileUpload</servlet-name>
    
<url-pattern>/FileUpload</url-pattern>
  
</servlet-mapping>
  
<servlet-mapping>
    
<servlet-name>ProductSalesChart</servlet-name>
    
<url-pattern>/ProductSalesChart</url-pattern>
  
</servlet-mapping>
    
</web-app>

 

5.通过地址访问此servlet即可生成相应图片。

6.本人编写了一个showproductsaleschart.jsp来显示生成的图片,代码如下:

 

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  
<head>
  
</head>
  
  
<body>
    
<center>产品销量图<br>
        
<img src="<%= request.getContextPath()%>/images/productsales/productsales.jpg"></img>
        
<img src="<%= request.getContextPath()%>/images/productsales/productsales_pie.jpg"></img>
    
</center>
  
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值