代码
- <?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)
代码
- public class Pie3DDemo {
- private DefaultPieDataset getDataset() {
-
- String[] section = new String[] { "Jan","Feb","Mar","Apr","May","Jun", "Jul","Aug","Sep","Oct","Nov","Dec" };
-
- double[] data = new double[section.length];
- for (int i = 0; i < data.length; i++) {
- data[i] = 10 + (Math.random() * 10);
- }
-
- 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();
-
- JFreeChart chart = ChartFactory.createPie3DChart(
- "Pie3D Chart Demo",
- dataset,
- true,
- true,
- false
- );
-
- chart.setBackgroundPaint(Color.cyan);
- PiePlot plot = (PiePlot) chart.getPlot();
- plot.setNoDataMessage("No data available");
-
- plot.setURLGenerator(new StandardPieURLGenerator("Bar3DDemo.jsp","section"));
- plot.setLabelGenerator(null);
-
- ChartRenderingInfo info = null;
- HttpSession session = request.getSession();
- try {
-
- response.setContentType("text/html");
- info = new ChartRenderingInfo(new StandardEntityCollection());
- BufferedImage chartImage = chart.createBufferedImage(640, 400, info);
-
-
- 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. 页面
代码
-
- <html>
- <head>
- <title>Pie Chart Demo</title>
- </head>
- <jsp:useBeanidjsp: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 { // 产生时间序列图,返回图片名称
代码
- 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("JFreeChart_Deleter");
- session.removeAttribute("JFreeChart_Deleter");
- session.setAttribute("JFreeChart_Deleter", deleter);
- }
- JFreeChart chart = ChartFactory.createPieChart3D(
- title,
- dataset,
- true,
- true,
- false );
-
- ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
-
-
- filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);
-
- 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;
- }
- }
|