在servlet中生成JFreeChart

时间:2010-04-18 20:53:47

标签: jfreechart

我正在尝试使用JFreeChart生成图表。我在web.xml中添加了记录,安装了jfreechart库。编译的servlet。下面的servlet代码显示:

import java.io.IOException;
import java.io.OutputStream;
import java.io.File;
import javax.servlet.*;
import javax.servlet.http.*;
import java.awt.Color;

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.data.general.DefaultPieDataset;



public class diagram extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) 
throws ServletException, IOException {

doTestPieChart(request,response);
   }

   protected void doTestPieChart(HttpServletRequest request, 
                                 HttpServletResponse response)
      throws IOException, ServletException
   {
      OutputStream out = response.getOutputStream();

      try
      {
         DefaultPieDataset dataset = new DefaultPieDataset();

         dataset.setValue("Graphic Novels", 192);
         dataset.setValue("History", 125);
         dataset.setValue("Military Fiction", 236); 
         dataset.setValue("Mystery", 547); 
         dataset.setValue("Performing Arts", 210);
         dataset.setValue("Science, Non-Fiction", 70);
         dataset.setValue("Science Fiction", 989); 

         JFreeChart chart = ChartFactory.createPieChart(
            "Books by Type",  
            dataset,         
            true,            
            false,            
            false             
         );
         chart.setBackgroundPaint(Color.white);

         response.setContentType("image/png");
         ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
   /*
   ServletContext sc = getServletContext(); 
   String filename = sc.getRealPath("pie.png");
   File file = new File(filename); 
   ChartUtilities.saveChartAsPNG(file,chart,400,300);
   */

      }
      catch (Exception e)
      {
         System.out.println(e.toString());
      }
      finally
      {
         out.close();
      }

   }


}

当我启动servlet时,错误显示:

HTTP Status 500 -

type Exception report

message

description The server encountered an internal error () that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Error instantiating servlet class diagram
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

root cause

java.lang.NoClassDefFoundError: org/jfree/data/general/PieDataset
 java.lang.Class.getDeclaredConstructors0(Native Method)
 java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
 java.lang.Class.getConstructor0(Class.java:2699)
 java.lang.Class.newInstance0(Class.java:326)
 java.lang.Class.newInstance(Class.java:308)
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

root cause

java.lang.ClassNotFoundException: org.jfree.data.general.PieDataset
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1484)
 org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1329)
 java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)
 java.lang.Class.getDeclaredConstructors0(Native Method)
 java.lang.Class.privateGetDeclaredConstructors(Class.java:2389)
 java.lang.Class.getConstructor0(Class.java:2699)
 java.lang.Class.newInstance0(Class.java:326)
 java.lang.Class.newInstance(Class.java:308)
 org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
 org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
 org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
 org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
 org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
 java.lang.Thread.run(Thread.java:619)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.24 logs.

帮我解决问题。问题在哪里?

1 个答案:

答案 0 :(得分:2)

确保您的

中有JFreeChart jar
WEB-INF/lib

目录或WAR部署文件。