/**
* 要是用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;
@Override
public 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的代理类对象
*/
@Override
public 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);
}
}