4.案例:查询各个级别分销商的数量(饼图和柱状图)-Servlet(柱状图)

来源:互联网 发布:新东方口语怎么样知乎 编辑:程序博客网 时间:2024/04/30 20:24
 
/** * 使用JFreeChar生成柱状图,不做任何注释,只求应用,生成的柱状图输出到网页中 *  * 1.加入jcommon-1.0.5.jar和jfreechart-1.0.2.jar *  * 2.设置值 * dataset.addValue(100, "", "苹果"); * dataset.addValue(200, "", "梨子"); * dataset.addValue(300, "", "葡萄"); * dataset.addValue(400, "", "香蕉"); * dataset.addValue(500, "", "荔枝"); *  *  * JFreeChart chart = ChartFactory.createBarChart3D("水果产量图", // 图表标题"水果", // 目录轴的显示标签"产量", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, true,false, false); * * 在浏览器地址栏中直接访问servlet */package com.bjpowernode.drp.statreport.web;import java.io.IOException;import java.util.Map;import java.util.Set;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.labels.StandardCategoryItemLabelGenerator;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.renderer.category.StackedBarRenderer3D;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import com.bjpowernode.drp.statreport.manager.StatReportManager;import com.bjpowernode.drp.util.ApplicationException;import com.bjpowernode.drp.util.BeanFactory;import com.bjpowernode.drp.util.TransactionHandler;@SuppressWarnings("serial")public class BarChartServlet extends HttpServlet {/**      * StatReportManager的代理类对象      */private StatReportManager statReportManager;    @Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {resp.setContentType("image/jpeg");CategoryDataset dataset = getDataSet();JFreeChart chart = ChartFactory.createBarChart3D("分销商分布柱状图", // 图表标题"分销商分布柱状图", // 目录轴的显示标签"个数", // 数值轴的显示标签dataset, // 数据集PlotOrientation.VERTICAL, true,false, false);CategoryPlot plot = (CategoryPlot)chart.getPlot();   StackedBarRenderer3D renderer=new StackedBarRenderer3D();renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());renderer.setItemLabelsVisible(true);plot.setRenderer(renderer);ChartUtilities.writeChartAsJPEG(resp.getOutputStream(),1.0f, chart,400,300, null);}private CategoryDataset getDataSet() {DefaultCategoryDataset dataset = new DefaultCategoryDataset();// Map(key="一级分销商", value=100;key="二级分销商", value=200,key="三级分销商", value=300)Map<String, Integer> clientLevelCount;try {// 调用StatReportManger代理类对象的方法,获取各个级别分销商的数量,封装在map中clientLevelCount = statReportManager.getClientLevelCount();} catch (ApplicationException e) {throw e;}// 遍历map,进行dataset.setValue("一级分销商", 100);// map中的每条记录(key, value)是Set类型,而Set的类型是Map.Entry<K, V>,这一切通过map的entrySet()获取  Set<Map.Entry<String, Integer>> entrySet = clientLevelCount.entrySet();// 遍历Setfor (Map.Entry<String, Integer> entry : entrySet) {dataset.addValue(entry.getValue(), "", entry.getKey());}return dataset;}/**      * 创建servlet时会调用该方法      * 获取StatReportManager的代理类对象      */  @Overridepublic void init() throws ServletException {// 获取工厂  BeanFactory beanFactory = (BeanFactory) this.getServletContext().getAttribute("beanFactory");// 获取StatReportManager实现类对象statReportManager = (StatReportManager) beanFactory.getServiceObject(StatReportManager.class);// 获取StatReportManager代理类对象TransactionHandler transactionHandler = new TransactionHandler();statReportManager = (StatReportManager) transactionHandler.newProxyInstance(statReportManager);}}