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, 400, 300, null);
pie_jpg = new FileOutputStream(generatedPath + "productsales_pie.jpg");
ChartUtilities.writeChartAsJPEG(pie_jpg, 1.0f, pieChart, 400, 300, null);
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>
本文介绍了一种使用Java Servlet和JFreeChart库生成产品销售条形图及饼图的方法。通过数据库查询获取产品销量数据,并将其展示为两种图表形式。
1741

被折叠的 条评论
为什么被折叠?



