JavaWeb图形报表饼状图

步骤说明:
1,导入log4j.jar,jfreechart-0.9.18.jar,jcommon-0.9.3.jar三个jar包

2,在某个包中写入Pie.java类

 

package com.mengya.util;

import java.awt.Color;
import java.awt.Font;
import java.awt.Insets;
import java.io.PrintWriter;

import javax.servlet.http.HttpSession;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartRenderingInfo;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardPieItemLabelGenerator;
import org.jfree.chart.plot.PiePlot;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.DefaultPieDataset;

public class Pie {
 private DefaultPieDataset data = new DefaultPieDataset();

 public void setValue(String key, double value) {
  data.setValue(key, value);

 }

 public String generatePieChart(String title, HttpSession session,
   PrintWriter pw, int wPhoto, int hPhoto) {

  String filename = null;
  try {
   JFreeChart chart = ChartFactory.createPieChart3D(title, data, true,
     true, false);
   // 设置图片的背景色
   chart.setBackgroundPaint(new java.awt.Color(189, 235, 255));
   // 设置图片标题的字体和大小
   Font font = new Font("黑体", Font.CENTER_BASELINE, 16);
   TextTitle _title = new TextTitle(title);
   _title.setFont(font);
   chart.setTitle(_title);
   PiePlot plot = (PiePlot) chart.getPlot();
   plot.setInsets(new Insets(5, 5, 5, 5));
   // 在统计图片上建连结
   // plot.setURLGenerator(new StandardPieURLGenerator("link.jsp",
   // "section"));
   plot.setStartAngle(270);
   // 指定显示的饼图上圆形还椭圆形
   plot.setCircular(false);
   // 指定图片的透明度
   plot.setForegroundAlpha(1.0f);
   // 没有数据时显示的消息
   plot.setNoDataMessage("当天没有统计数据");
   plot.setNoDataMessageFont(new Font("黑体", Font.CENTER_BASELINE, 16));
   plot.setNoDataMessagePaint(Color.RED);

   // plot.setRadius(0.70);
   // 抽离一个 section 出来,不支持3D
   // plot.setExplodePercent(1, 1.00);
   plot.setSectionOutlinePaint(Color.BLACK);

   // 显示百分比
   plot.setLabelGenerator(new StandardPieItemLabelGenerator(
     StandardPieItemLabelGenerator.DEFAULT_TOOLTIP_FORMAT));
   // 设置背景的透明度
   plot.setBackgroundAlpha(0.6f);
   // 把生成的图片放到临时目录
   ChartRenderingInfo info = new ChartRenderingInfo(
     new StandardEntityCollection());
   // 500是图片长度,300是图片高度

   filename = ServletUtilities.saveChartAsJPEG(chart, wPhoto, hPhoto,
     info, session);
   ChartUtilities.writeImageMap(pw, filename, info);
   pw.flush();

  } catch (Exception e) {
   System.out.println("Exception - " + e.toString());
   e.printStackTrace(System.out);
   filename = "public_error_500x300.png";
  }
  return filename;
 }
}

3,配置web.xml,在web.xml中添加如下内空:
 <servlet>
  <servlet-name>DisplayChart</servlet-name>
  <servlet-class>
   org.jfree.chart.servlet.DisplayChart
  </servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>DisplayChart</servlet-name>
  <url-pattern>/DisplayChart</url-pattern>
 </servlet-mapping>

4,在要显示图片的jsp中添加内容:
  <%@ page import="com.mengya.util.Pie"%>
  <%@ page import="com.mengya.bean.VegetableBean"%>
  <%@ page import="java.io.PrintWriter"%>

  <%
   Pie biz = new Pie();
   List ar = (ArrayList) request.getAttribute("arr");
   for (int i = 0; i < ar.size(); i++) {
    VegetableBean bean = (VegetableBean) ar.get(i);
    biz.setValue(bean.getV_name(), bean.getV_count());
   }
   String filename = biz.generatePieChart("蔬菜品种例比图", session,
     new PrintWriter(out), 700, 450);
   String url = request.getContextPath() + "/DisplayChart?filename="
     + filename;
  %>
  <table align="center" border="0">
   <tr>
    <td>
     <P ALIGN="CENTER">
      <img src="<%=url%>" width=700 height=450 border=1
       usemap="#<%=filename%>">
     </p>
    </td>
   </tr>
  </table>

你可能感兴趣的:(jsp,log4j,bean,servlet,jfreechart)