Generate JFreeChart in servlet
- by San4o
I'm trying to generate graphs using JFreeChart. I added record in web.xml, installed jfreechart library. Compiled servlet. Below code of servlet has shown:
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();
      }
   }
}
When i launch the servlet, mistake has shown :
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.
Help me to solve a problem. and where is problem?