JfreeChart学习总结(2)

3)jsp+servlet+javabean方式
1. Create ChartViewer servlet

Java代码 
  1. public   class  ChartViewer  extends  HttpServlet {   
  2. public   void  init()  throws  ServletException {  
  3. }   
  4. //Process the HTTP Get request   
  5. public   void  doGet(HttpServletRequest request, HttpServletResponse response)   throws  ServletException, IOException {   
  6. // get the chart from session   
  7. HttpSession session = request.getSession();   
  8. BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage" );   
  9. // set the content type so the browser can see this as a picture    
  10. response.setContentType("image/png" );   
  11. // send the picture    
  12. PngEncoder encoder = new  PngEncoder(chartImage,  false 0 9 );   
  13. response.getOutputStream().write(encoder.pngEncode());  
  14. }   
  15. //Process the HTTP Post request    
  16. public   void  doPost(HttpServletRequest request, HttpServletResponse response)   throws  ServletException, IOException {   
  17. doGet(request, response);   
  18. }   
  19. //Process the HTTP Put request    
  20. public   void  doPut(HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException {   
  21. }   
  22. //Clean up resources    
  23. public   void  destroy() { }   
  24. }   
Java代码 复制代码
  1. public   class  ChartViewer  extends  HttpServlet {   public   void  init()  throws  ServletException { }   //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  // get the chart from session HttpSession session = request.getSession();  BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");  // set the content type so the browser can see this as a picture  response.setContentType("image/png");  // send the picture  PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9);  response.getOutputStream().write(encoder.pngEncode()); }  //Process the HTTP Post request  public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  doGet(request, response);  }  //Process the HTTP Put request  public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  }  //Clean up resources  public void destroy() { }  }    
Java代码   收藏代码
  1. public   class  ChartViewer  extends  HttpServlet {   public   void  init()  throws  ServletException { }   //Process the HTTP Get request public void doGet(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  // get the chart from session HttpSession session = request.getSession();  BufferedImage chartImage = (BufferedImage) session.getAttribute("chartImage");  // set the content type so the browser can see this as a picture  response.setContentType("image/png");  // send the picture  PngEncoder encoder = new PngEncoder(chartImage, false, 0, 9);  response.getOutputStream().write(encoder.pngEncode()); }  //Process the HTTP Post request  public void doPost(HttpServletRequest request, HttpServletResponse response)  throws ServletException, IOException {  doGet(request, response);  }  //Process the HTTP Put request  public void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  }  //Clean up resources  public void destroy() { }  }    



2. Create a servlet map in web.xml

Java代码 
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>   
  2. <web-app>   
  3.  <servlet>   
  4.  <servlet-name>ChartViewer</servlet-name>   
  5.  <servlet-class >myapp.webwork.servlets.ChartViewer</servlet- class >   
  6. </servlet>   
  7. <servlet-mapping>   
  8. <servlet-name>ChartViewer</servlet-name>   
  9. <url-pattern>/servlet/ChartViewer</url-pattern>   
  10. </servlet-mapping>   
  11. </web-app>   
Java代码 复制代码
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  <web-app>   <servlet>   <servlet-name>ChartViewer</servlet-name>   <servlet- class >myapp.webwork.servlets.ChartViewer</servlet- class >  </servlet>  <servlet-mapping>  <servlet-name>ChartViewer</servlet-name>  <url-pattern>/servlet/ChartViewer</url-pattern>  </servlet-mapping>  </web-app>   
Java代码   收藏代码
  1. <?xml version= "1.0"  encoding= "UTF-8" ?>  <web-app>   <servlet>   <servlet-name>ChartViewer</servlet-name>   <servlet- class >myapp.webwork.servlets.ChartViewer</servlet- class >  </servlet>  <servlet-mapping>  <servlet-name>ChartViewer</servlet-name>  <url-pattern>/servlet/ChartViewer</url-pattern>  </servlet-mapping>  </web-app>   



3. Create a chart in a java bean (Pie3DDemo.java)

Java代码 复制代码
  1. public   class  Pie3DDemo {   
  2. private  DefaultPieDataset getDataset() {   
  3. // categories...    
  4. String[] section = new  String[] {  "Jan" , "Feb" , "Mar" , "Apr" , "May" , "Jun" "Jul" , "Aug" , "Sep" , "Oct" , "Nov" , "Dec"  };   
  5. // data...    
  6. double [] data =  new   double [section.length];   
  7.  for  ( int  i =  0 ; i < data.length; i++) {   
  8.      data[i] = 10  + (Math.random() *  10 );   
  9. }   
  10. // create the dataset...    
  11. DefaultPieDataset dataset = new  DefaultPieDataset();   
  12. for  ( int  i =  0 ; i < data.length; i++) {   
  13.        dataset.setValue(section[i], data[i]);   
  14. }   
  15. return  dataset;   
  16. }   
  17. public  String getChartViewer(HttpServletRequest request, HttpServletResponse response) {   
  18.  DefaultPieDataset dataset = getDataset();   
  19. // create the chart...    
  20.  JFreeChart  chart = ChartFactory.createPie3DChart(   
  21.   "Pie3D Chart Demo" ,   // chart title    
  22.   dataset,             // data    
  23.   true ,                 // include legend    
  24.   true ,   
  25.   false    
  26.  );   
  27. // set the background color for the chart...    
  28. chart.setBackgroundPaint(Color.cyan);   
  29. PiePlot plot = (PiePlot) chart.getPlot();   
  30. plot.setNoDataMessage("No data available" );   
  31. // set drilldown capability...    
  32.  plot.setURLGenerator(new  StandardPieURLGenerator( "Bar3DDemo.jsp" , "section" ));   
  33. plot.setLabelGenerator(null );   
  34. // OPTIONAL CUSTOMISATION COMPLETED.    
  35. ChartRenderingInfo info = null ;   
  36. HttpSession session = request.getSession();   
  37. try  {   
  38. //Create RenderingInfo object    
  39.  response.setContentType("text/html" );   
  40.  info = new  ChartRenderingInfo( new  StandardEntityCollection());   
  41.  BufferedImage chartImage = chart.createBufferedImage(640 400 , info);   
  42. // putting chart as BufferedImage in session,    
  43. // thus making it available for the image reading action Action.    
  44. session.setAttribute("chartImage" , chartImage);   
  45. PrintWriter writer = new  PrintWriter(response.getWriter());   
  46. ChartUtilities.writeImageMap(writer, "imageMap" , info);   
  47. writer.flush();   
  48. catch  (Exception e) { }   
  49.   
  50. String pathInfo = "http://" ;   
  51. pathInfo += request.getServerName();   
  52. int  port = request.getServerPort();   
  53. pathInfo += ":" +String.valueOf(port);   
  54. pathInfo += request.getContextPath();   
  55. String chartViewer = pathInfo + "/servlet/ChartViewer" ;   
  56. return  chartViewer;   
  57. }   
Java代码 复制代码
  1. public   class  Pie3DDemo {   private  DefaultPieDataset getDataset() {   // categories...  String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };  // data...  double[] data = new double[section.length];   for (int i = 0; i < data.length; i++) {       data[i] = 10 + (Math.random() * 10);  }  // create the dataset...  DefaultPieDataset dataset = new DefaultPieDataset();  for (int i = 0; i < data.length; i++) {         dataset.setValue(section[i], data[i]);  }  return dataset;  }  public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {   DefaultPieDataset dataset = getDataset();  // create the chart...   <SPAN class=hilite1>JFreeChart</SPAN> chart = ChartFactory.createPie3DChart(    "Pie3D Chart Demo",  // chart title    dataset,             // data    true,                // include legend    true,    false   );  // set the background color for the chart...  chart.setBackgroundPaint(Color.cyan);  PiePlot plot = (PiePlot) chart.getPlot();  plot.setNoDataMessage("No data available");  // set drilldown capability...   plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));  plot.setLabelGenerator(null);  // OPTIONAL CUSTOMISATION COMPLETED.  ChartRenderingInfo info = null;  HttpSession session = request.getSession();  try {  //Create RenderingInfo object   response.setContentType("text/html");   info = new ChartRenderingInfo(new StandardEntityCollection());   BufferedImage chartImage = chart.createBufferedImage(640, 400, info);  // putting chart as BufferedImage in session,  // thus making it available for the image reading action Action.  session.setAttribute("chartImage", chartImage);  PrintWriter writer = new PrintWriter(response.getWriter());  ChartUtilities.writeImageMap(writer, "imageMap", info);  writer.flush();  } catch (Exception e) { }   String pathInfo = "http://";  pathInfo += request.getServerName();  int port = request.getServerPort();  pathInfo += ":"+String.valueOf(port);  pathInfo += request.getContextPath();  String chartViewer = pathInfo + "/servlet/ChartViewer";  return chartViewer;  }    
Java代码   收藏代码
  1. public   class  Pie3DDemo {   private  DefaultPieDataset getDataset() {   // categories...  String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };  // data...  double[] data = new double[section.length];   for (int i = 0; i < data.length; i++) {       data[i] = 10 + (Math.random() * 10);  }  // create the dataset...  DefaultPieDataset dataset = new DefaultPieDataset();  for (int i = 0; i < data.length; i++) {         dataset.setValue(section[i], data[i]);  }  return dataset;  }  public String getChartViewer(HttpServletRequest request, HttpServletResponse response) {   DefaultPieDataset dataset = getDataset();  // create the chart...   <span class="hilite1"><span style="background-color: #ffff00;">JFreeChart</span></span> chart = ChartFactory.createPie3DChart(    "Pie3D Chart Demo",  // chart title    dataset,             // data    true,                // include legend    true,    false   );  // set the background color for the chart...  chart.setBackgroundPaint(Color.cyan);  PiePlot plot = (PiePlot) chart.getPlot();  plot.setNoDataMessage("No data available");  // set drilldown capability...   plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));  plot.setLabelGenerator(null);  // OPTIONAL CUSTOMISATION COMPLETED.  ChartRenderingInfo info = null;  HttpSession session = request.getSession();  try {  //Create RenderingInfo object   response.setContentType("text/html");   info = new ChartRenderingInfo(new StandardEntityCollection());   BufferedImage chartImage = chart.createBufferedImage(640, 400, info);  // putting chart as BufferedImage in session,  // thus making it available for the image reading action Action.  session.setAttribute("chartImage", chartImage);  PrintWriter writer = new PrintWriter(response.getWriter());  ChartUtilities.writeImageMap(writer, "imageMap", info);  writer.flush();  } catch (Exception e) { }   String pathInfo = "http://";  pathInfo += request.getServerName();  int port = request.getServerPort();  pathInfo += ":"+String.valueOf(port);  pathInfo += request.getContextPath();  String chartViewer = pathInfo + "/servlet/ChartViewer";  return chartViewer;  }    



6. 页面

Java代码 
  1.    
  2. <html>   
  3. <head>   
  4. <title>Pie Chart Demo</title>   
  5. </head>   
  6. <jsp:useBeanid="myChart" scope= "session" class = "myapp.webwork.beans.Pie3DDemo"  />   
  7. <body>   
  8. <h2>Pie Chart Demo</h2>   
  9. <%String chartViewer = myChart.getChartViewer(request, response);%>   
  10. <img src="<%=chartViewer%>"  border= 0  usemap= "#imageMap" >   
  11. </body>   
  12. </html>   
Java代码 复制代码
  1. <html>  <head>  <title>Pie Chart Demo</title>  </head>  <jsp:useBeanid= "myChart" scope= "session" class = "myapp.webwork.beans.Pie3DDemo"  />  <body>  <h2>Pie Chart Demo</h2>  <%String chartViewer = myChart.getChartViewer(request, response);%>  <img src= "<%=chartViewer%>"  border= 0  usemap= "#imageMap" >  </body>  </html>   
Java代码   收藏代码
  1. <html>  <head>  <title>Pie Chart Demo</title>  </head>  <jsp:useBeanid= "myChart" scope= "session" class = "myapp.webwork.beans.Pie3DDemo"  />  <body>  <h2>Pie Chart Demo</h2>  <%String chartViewer = myChart.getChartViewer(request, response);%>  <img src= "<%=chartViewer%>"  border= 0  usemap= "#imageMap" >  </body>  </html>   



4)采用工具类ChartUtil和DisplayChart(jfreechart 的servlet)输出
我用了上面的几个方法输出图片,发现页面里只能输出一个图片,
不过下面的方法可以输出多个图片,而且是几种方式中最简单的一个,推荐使用。

这种方式和上面的三种比较类似,是将javabean里的生成图片的方法写的一个工具类ChartUtil里面。

1 .添加工具类ChartUtil
public class ChartUtil {
// 产生时间序列图,返回图片名称

Java代码 
  1. public    static  String generatePieChart(DefaultPieDataset dataset,String title, int  width, int  height,HttpSession session, PrintWriter pw) {   
  2.   
  3. String filename = null ;   
  4.  try  {   
  5.  if  (session !=  null )   
  6.  {   
  7. ChartDeleter deleter = (ChartDeleter)session.getAttribute(" JFreeChart _Deleter" );   
  8.  session.removeAttribute(" JFreeChart _Deleter" );   
  9.  session.setAttribute(" JFreeChart _Deleter" , deleter);   
  10. }   
  11. JFreeChart  chart = ChartFactory.createPieChart3D(   
  12. title,  // chart title    
  13. dataset, // data    
  14. true ,   // include legend    
  15. true ,   
  16. false  );   
  17. //  Write the chart image to the temporary directory    
  18. ChartRenderingInfo info = new  ChartRenderingInfo( new  StandardEntityCollection());    
  19. //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.    
  20. //If the last parameter is a session object, the chart remains until session time out.    
  21. filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);    
  22. //  Write the image map to the PrintWriter    
  23.  ChartUtilities.writeImageMap(pw, filename, info,true );   
  24.  pw.flush();   
  25. catch  (Exception e) {   
  26.  System.out.println("Exception - "  + e.toString());   
  27.  e.printStackTrace(System.out);   
  28.  filename = "picture_error.png" ; }   
  29. return  filename;   
  30. }   
  31. }   
Java代码 复制代码
  1. public    static  String generatePieChart(DefaultPieDataset dataset,String title, int  width, int  height,HttpSession session, PrintWriter pw) {   String filename =  null ;    try  {    if  (session !=  null )   {  ChartDeleter deleter = (ChartDeleter)session.getAttribute( "<SPAN class=hilite1>JFreeChart</SPAN>_Deleter" );   session.removeAttribute( "<SPAN class=hilite1>JFreeChart</SPAN>_Deleter" );   session.setAttribute( "<SPAN class=hilite1>JFreeChart</SPAN>_Deleter" , deleter);  }  <SPAN  class =hilite1>JFreeChart</SPAN> chart = ChartFactory.createPieChart3D(  title,   // chart title  dataset, // data  true,  // include legend  true,  false );  //  Write the chart image to the temporary directory  ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());  //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.  //If the last parameter is a session object, the chart remains until session time out.  filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);  //  Write the image map to the PrintWriter   ChartUtilities.writeImageMap(pw, filename, info,true);   pw.flush();  } catch (Exception e) {   System.out.println("Exception - " + e.toString());   e.printStackTrace(System.out);   filename = "picture_error.png"; }  return filename;  }  }    
Java代码   收藏代码
  1. public    static  String generatePieChart(DefaultPieDataset dataset,String title, int  width, int  height,HttpSession session, PrintWriter pw) {   String filename =  null ;    try  {    if  (session !=  null )   {  ChartDeleter deleter = (ChartDeleter)session.getAttribute( "<span class=" hilite1 "><span style=" background-color: #ffff00; ">JFreeChart</span></span>_Deleter" );   session.removeAttribute( "<span class=" hilite1 "><span style=" background-color: #ffff00; ">JFreeChart</span></span>_Deleter" );   session.setAttribute( "<span class=" hilite1 "><span style=" background-color: #ffff00; ">JFreeChart</span></span>_Deleter" , deleter);  }  <span  class = "hilite1" ><span style= "background-color: #ffff00;" >JFreeChart</span></span> chart = ChartFactory.createPieChart3D(  title,   // chart title  dataset, // data  true,  // include legend  true,  false );  //  Write the chart image to the temporary directory  ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());  //If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.  //If the last parameter is a session object, the chart remains until session time out.  filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);  //  Write the image map to the PrintWriter   ChartUtilities.writeImageMap(pw, filename, info,true);   pw.flush();  } catch (Exception e) {   System.out.println("Exception - " + e.toString());   e.printStackTrace(System.out);   filename = "picture_error.png"; }  return filename;  }  }    




2、在action里统计数据,设置好数据集dataset。传到页面

3、 在页面里取出
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset");
// 用ChartUtil工具类产生图片

Java代码 
  1. String p = ChartUtil.generatePieChart(piedataset, " 项目收支线图" , 500 , 300 , null new  PrintWriter(out));   
  2. String p1 = request.getContextPath() + "/servlet/DisplayChart?filename="  + p;    
Java代码 复制代码
  1. String p = ChartUtil.generatePieChart(piedataset, " 项目收支线图" , 500 , 300 , null new  PrintWriter(out));  String p1 = request.getContextPath() +  "/servlet/DisplayChart?filename="  + p;   
Java代码   收藏代码
  1. String p = ChartUtil.generatePieChart(piedataset, " 项目收支线图" , 500 , 300 , nullnew  PrintWriter(out));  String p1 = request.getContextPath() +  "/servlet/DisplayChart?filename="  + p;   


通过以下方式输出

Java代码 
  1. <td><img src= "<%= p1 %>"  width= 500  height= 300  border= 0  usemap= "#<%= p %>" ></td>  
Java代码 复制代码
  1. <td><img src= "<%= p1 %>"  width= 500  height= 300  border= 0  usemap= "#<%= p %>" ></td>  
Java代码   收藏代码
  1. <td><img src= "<%= p1 %>"  width= 500  height= 300  border= 0  usemap= "#<%= p %>" ></td>  



4、在web.xml中添加

Java代码 复制代码
  1. <servlet>  
  2.   <servlet-name>DisplayChart</servlet-name>  
  3.   <servlet-class >org.jfree.chart.servlet.DisplayChart</servlet- class >  
  4. </servlet>  
  5. <servlet-mapping>  
  6.     <servlet-name>DisplayChart</servlet-name>  
  7.     <url-pattern>/servlet/DisplayChart</url-pattern>  
  8. </servlet-mapping>   
Java代码 复制代码
  1. <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>/servlet/DisplayChart</url-pattern> </servlet-mapping>  
Java代码   收藏代码
  1. <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>/servlet/DisplayChart</url-pattern> </servlet-mapping>  



5) ApplicationFrame 方式

Java代码 复制代码
  1. public   class  PieChartDemo1  extends  ApplicationFrame {   
  2. public  PieChartDemo1(String title) {   
  3. super (title);   
  4. setContentPane(createDemoPanel());   
  5. }   
  6. private   static  JFreeChart  createChart(PieDataset dataset) {   
  7. JFreeChart  chart = ChartFactory.createPieChart(   
  8. .......  
  9. return  chart;   
  10. }   
  11.   
  12. public   static  JPanel createDemoPanel() {   
  13. JFreeChart  chart = createChart(createDataset());   
  14. return   new  ChartPanel(chart);   
  15. }   
  16.   
  17. public   static   void  main(String[] args) {   
  18. PieChartDemo1 demo = new  PieChartDemo1( "Pie Chart Demo 1" );   
  19. demo.pack();   
  20. RefineryUtilities.centerFrameOnScreen(demo);   
  21. demo.setVisible(true );   
  22. }   
  23. }   
Java代码 复制代码
  1. public   class  PieChartDemo1  extends  ApplicationFrame {   public  PieChartDemo1(String title) {   super (title);  setContentPane(createDemoPanel());  }   private   static  <SPAN  class =hilite1>JFreeChart</SPAN> createChart(PieDataset dataset) {  <SPAN  class =hilite1>JFreeChart</SPAN> chart = ChartFactory.createPieChart(  .......  return  chart;  }    public   static  JPanel createDemoPanel() {  <SPAN  class =hilite1>JFreeChart</SPAN> chart = createChart(createDataset());   return   new  ChartPanel(chart);  }    public   static   void  main(String[] args) {  PieChartDemo1 demo =  new  PieChartDemo1( "Pie Chart Demo 1" );  demo.pack();  RefineryUtilities.centerFrameOnScreen(demo);  demo.setVisible( true );  }  }   
Java代码   收藏代码
  1. public   class  PieChartDemo1  extends  ApplicationFrame {   public  PieChartDemo1(String title) {   super (title);  setContentPane(createDemoPanel());  }   private   static  <span  class = "hilite1" ><span style= "background-color: #ffff00;" >JFreeChart</span></span> createChart(PieDataset dataset) {  <span  class = "hilite1" ><span style= "background-color: #ffff00;" >JFreeChart</span></span> chart = ChartFactory.createPieChart(  .......  return  chart;  }    public   static  JPanel createDemoPanel() {  <span  class = "hilite1" ><span style= "background-color: #ffff00;" >JFreeChart</span></span> chart = createChart(createDataset());   return   new  ChartPanel(chart);  }    public   static   void  main(String[] args) {  PieChartDemo1 demo =  new  PieChartDemo1( "Pie Chart Demo 1" );  demo.pack();  RefineryUtilities.centerFrameOnScreen(demo);  demo.setVisible( true );  }  }   



六. 可参考资料与网址

官方网站

http://www.jfree.org/jfreechart /index.html

官方论坛

http://www.jfree.org/phpBB2/index.php

API 文档

http://www.jfree.org/jfreechart /api/gjdoc/index.html

中文API

http://blog.sina.com.cn/u/405da78d010000ap

 

 

 

 

转自:http://wangyu.iteye.com/blog/211259

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值