/**
* 使用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;
@Override
protected 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();
// 遍历Set
for (Map.Entry<String, Integer> entry : entrySet) {
dataset.addValue(entry.getValue(), "", entry.getKey());
}
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);
}
}
4.案例:查询各个级别分销商的数量(饼图和柱状图)-Servlet(柱状图)
最新推荐文章于 2024-03-20 16:31:57 发布