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

来源:互联网 发布:新东方口语怎么样知乎 编辑:程序博客网 时间:2024/05/01 03:13
/** * 要是用JFreeChar生成饼图,不做任何注释,只求应用,生成的饼图输出到网页中 *  * 1.加入jcommon-1.0.5.jar和jfreechart-1.0.2.jar *  * 2.设置值 * dataset.setValue("苹果", 100); * dataset.setValue("梨子", 200); * dataset.setValue("葡萄", 300); * dataset.setValue("香蕉", 400); * dataset.setValue("荔枝", 500); *  * 在浏览器地址栏中直接访问servlet */package com.bjpowernode.drp.statreport.web;import java.io.IOException;import java.text.DecimalFormat;import java.text.NumberFormat;import java.util.Map;import java.util.Set;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServlet;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.labels.StandardPieSectionLabelGenerator;import org.jfree.chart.plot.PiePlot3D;import org.jfree.data.general.DefaultPieDataset;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 CharMemoServlet extends HttpServlet {/** * StatReportManager的代理类对象 */private StatReportManager statReportManager;@Overridepublic void service(ServletRequest req, ServletResponse res)throws ServletException, IOException {res.setContentType("image/jpeg");DefaultPieDataset data = getDataSet();JFreeChart chart = ChartFactory.createPieChart3D("分销商分布饼图",data, true,false,false);PiePlot3D plot = (PiePlot3D) chart.getPlot();plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})", NumberFormat.getNumberInstance(),new DecimalFormat("0.00%")));plot.setLegendLabelGenerator(new StandardPieSectionLabelGenerator("{0}={1}({2})"));ChartUtilities.writeChartAsJPEG(res.getOutputStream(), 1.0f, chart,400, 300, null);}private DefaultPieDataset getDataSet() {DefaultPieDataset dataset = new DefaultPieDataset();// 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>> clientLevelCountEntrySet = clientLevelCount.entrySet();                    // 遍历Set          for (Map.Entry<String, Integer> clientLevelCountEntry : clientLevelCountEntrySet) {          dataset.setValue(clientLevelCountEntry.getKey(), clientLevelCountEntry.getValue());        }        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);}}

 
原创粉丝点击