第二种方式,在web的服务端生成图表后发送给浏览器端。

(以下代码可以执行)

 

既然是web程序,那首要就是工程文件web.xml了。

web.xml
    <servlet>
         <servlet-name>ChartServlet</servlet-name>
         <servlet-class>com.××.××.report.ChartServlet</servlet-class>
     </servlet>

     <servlet-mapping>
         <servlet-name>ChartServlet</servlet-name>
         <url-pattern>/chartServlet</url-pattern>
     </servlet-mapping> 
ChartServlet.java
//生成JFreeChart chart实例与第一种方法无异
//关键在于chart图形的显示上
//第一种方式是要把chart加入ChartPanel,如后显示在Frame中
//第二种方式则简单些
 //ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 500, 300);//ChartUtilities -- A collection of utility methods for JFreeChart. Includes methods for converting charts to image //formats (PNG and JPEG) plus creating simple HTML image maps. 
//利用JFreeChart包中的函数,把图形输出到response
//当然也可以把该图形文件保存,只需这般 ChartUtilities.writeChartAsJPEG(new FileOutputStream("D:// test.jpg"), chart, 500, 300);

图片发送到浏览器端

java 自动化报表 java生成报表实现_java 自动化报表

图片写在文件中

java 自动化报表 java生成报表实现_jfreechart_02

 

package com.youcity.website.tools.report;

 import java.awt.BasicStroke;
 import java.awt.Color;
 import java.io.IOException;

 import javax.servlet.*;
 import javax.servlet.http.*;

 import org.jfree.chart.ChartFactory;
 import org.jfree.chart.ChartUtilities;
 import org.jfree.chart.JFreeChart;
 import org.jfree.chart.plot.MeterPlot;
 import org.jfree.chart.plot.PlotOrientation;
 import org.jfree.chart.plot.ThermometerPlot;
 import org.jfree.data.Range;
 import org.jfree.data.category.DefaultCategoryDataset;
 import org.jfree.data.general.DefaultPieDataset;
 import org.jfree.data.general.DefaultValueDataset;

 /**
  * 生成jFreeChart图片的Servlet
  * 
  * @author javaFound
  */
 public class ChartServlet extends HttpServlet {
     /**
      * 根据客户端请求的图表类型chartType的值,返回对应的图表,
      */
     public void service(HttpServletRequest request, HttpServletResponse response)
             throws ServletException, IOException {
         // 输出图片格式为png格式
         response.setHeader("Cache-Control", "no-cache");
         response.setContentType("image/png");
         // 请求的图表类型
         String chartType = request.getParameter("chartType");
         System.out.println("请求的图表类型是 : " + chartType);
         // for export Chart:
         JFreeChart chart = null;
         if (chartType.equalsIgnoreCase("PieChart3D")) {
             // 创建pie图的数据集方法
             DefaultPieDataset data = ChartTools.getPieDataSet();
             chart = ChartFactory.createPieChart3D("这是PieChart3D图:", data, true,
                     false, false);
         } else if (chartType.equalsIgnoreCase("PieChart")) {
             // 创建pie图的数据集方法
             DefaultPieDataset data = ChartTools.getPieDataSet();
             chart = ChartFactory.createPieChart("这是PieChart图:", data, true,
                     false, false);
         } else if (chartType.equalsIgnoreCase("RingChart")) {
             // 创建pie图的数据集方法
             DefaultPieDataset data = ChartTools.getPieDataSet();
             chart = ChartFactory.createRingChart("这是RingChart图:", data, true,
                     false, false);
         } else if (chartType.equalsIgnoreCase("BarChart3D")) {
             // 创建bar图的数据集方法
             DefaultCategoryDataset data = ChartTools.getCategoryDataset();
             // PlotOrientation.HORIZONTAL这个参数说明是水平还是垂直方向VERTICAL
             chart = ChartFactory.createBarChart3D("这是BarChart3D", "数量", "地点",
                     data, PlotOrientation.VERTICAL, true, false, false);
         } else if (chartType.equalsIgnoreCase("LineChart")) {
             // 创建线图
             DefaultCategoryDataset data = ChartTools.getCategoryDataset();
             chart = ChartFactory.createLineChart("这是LineChart", "数量", "地点",
                     data, PlotOrientation.VERTICAL, true, false, false);
         } else if (chartType.equalsIgnoreCase("AreaChart")) {
             // 创建区域形图
             DefaultCategoryDataset data = ChartTools.getCategoryDataset();
             chart = ChartFactory.createAreaChart("这是AreaChart", "数量", "地点",
                     data, PlotOrientation.VERTICAL, true, false, false);
         } else if (chartType.equalsIgnoreCase("WaterfallChart")) {
             // 搞不明白这是什么图:(
             DefaultCategoryDataset data = ChartTools.getCategoryDataset();
             chart = ChartFactory.createWaterfallChart("这是WaterfallChart", "数量",
                     "地点", data, PlotOrientation.VERTICAL, true, false, false);
         } else if (chartType.equalsIgnoreCase("Thermometer")) {
             // 整个温度计。。。。。。。。。。
             // 数据集,初始值为0
             DefaultValueDataset valuedataset = new DefaultValueDataset(0);
             // 创建漫度计的Plot对象
             ThermometerPlot thermometerplot = new ThermometerPlot(valuedataset);
             chart = new JFreeChart("设备温度", JFreeChart.DEFAULT_TITLE_FONT,
                     thermometerplot, false);
             thermometerplot.setThermometerStroke(new BasicStroke(2.0F));
             // 图表的轮廓颜色
             thermometerplot.setThermometerPaint(Color.BLUE);
             thermometerplot.setOutlinePaint(null);
             // 图表计数单位
             thermometerplot.setUnits(10);
             // 数值范围
             thermometerplot.setRange(-40, 40);
             thermometerplot.setForegroundAlpha(1f);
             // 图表的当前值
             valuedataset.setValue(20);
         } else if (chartType.equalsIgnoreCase("MeterChart")) {
             // 整个仪表盘
             // 数据集,初始值为30
             DefaultValueDataset valuedataset = new DefaultValueDataset(30);
             // 创建Plot对象
             MeterPlot meterplot = new MeterPlot(valuedataset);
             chart = new JFreeChart("当前流量速度", JFreeChart.DEFAULT_TITLE_FONT,
                     meterplot, false);
             // 表盘上显示的数据单位说明
             meterplot.setUnits("条/秒)");
             // 表盘分害的单位,即30为一格
             meterplot.setTickSize(30);
             // 显示数据范围,0~600
             meterplot.setRange(new Range(0, 600));
             // 图表的当前值
             valuedataset.setValue(100);
         }
         if (null != chart) {
             // 将图片对象输出到客户端
             java.io.OutputStream ous = response.getOutputStream();
             ChartUtilities.writeChartAsJPEG(ous, chart, 500, 300);
             // 使用这样的代码输出可能会出错!
             // ChartUtilities.writeChartAsJPEG(ous,100,chart,500,300,null);
             ous.flush();
             ous.close();
         }
     }
 }

页面代码如下:

 

<%@page contentType="text/html" pageEncoding="utf-8"%>  
 <title>jFreeChart图表测试 @NetJava.cn</title>  
 <br>请选择要生成的图表类型:  
 <hr>  
     <select id="scType" οnchange="loadChartBySelectType(this)">  
         <option value="1">请选择一种图表</option>  
         <option value="PieChart3D">PieChart3D</option>  
         <option value="PieChart">PieChart</option>  
         <option value="BarChart3D">BarChart3D</option>  
         <option value="LineChart">LineChart</option>  
         <option value="RingChart">RingChart</option>  
         <option value="AreaChart">AreaChart</option>  
         <option value="WaterfallChart">WaterfallChart</option>  
         <option value="Thermometer">Thermometer</option>  
         <option value="MeterChart">MeterChart</option>  
     </select>  
 <hr>  
  
 <div id="displayChart" />  
  
 <script type="text/javascript">  
     /**选择jf图表类型时,载入图片*/  
     function loadChartBySelectType(sua) {  
         var cType=sua.value;  
         if(cType=="1"){  
         return ;  
     }  
     var disabledImageZone=document.getElementById("displayChart");  
      //这样多简单,清理div中己有的东东:)  
      disabledImageZone.innerHTML="";  
     var imageZone = document.createElement('img');  
     imageZone.setAttribute('id','imageZone');  
     //提取服务器上的图片显示下来:  
     imageZone.setAttribute('src',"chartServlet?chartType="+cType);  
     disabledImageZone.appendChild(imageZone);  
 }  
 </script>

另:

如果遇到如下错误

1. WARN(SimpleSaxErrorHandler.java: 45 );XmlBeanDefinitionReader: 45  - Ignored XML validation warning: URI was not reported to parser  for
2. org.xml.sax.SAXParseException: URI was not reported to parser for
3. 934
4. 631
5. 3358
6. 159
7. 320
8. 294
9. 186 ); 
10. ……
1. WARN(SimpleSaxErrorHandler.java:45 );XmlBeanDefinitionReader: 45  - Ignored XML validation warning: No base URI; hope URI is absolute: http: //www.springframework.org/dtd/spring-beans.dtd
2. org.xml.sax.SAXParseException: No base URI; hope URI is absolute: http://www.springframework.org/dtd/spring-beans.dtd
3. 934
4. 2399
5. 804
6. 522
7. 414
8. 167
9. 320
10. 294
11. 186 );

说明JFreeChart和spring有冲突,去掉JFreeChart的gnujaxp.jar就好了