📄 jinteractiveservlet.java
字号:
// Fig. 8.3_03: JInteractiveServlet.java
// JFreeChart实例26: 利用JFreeChart编写的具有交互功能的Servlet
package com.fatcat.webchart;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.util.*;
import java.awt.image.*;
import java.awt.*;
import javax.imageio.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.data.*;
import org.jfree.data.category.*;
import org.jfree.data.general.*;
public class JInteractiveServlet extends HttpServlet
{
String chartTitle = "利用JFreeChart编写的具有交互功能的Servlet";
int width = 500, height = 375;
String bookTitle[] =
{
"Python", "JAVA", "C#", "Perl", "PHP"
};
String category[] =
{
"第1周", "第2周", "第3周", "第4周"
};
int bookSales = 0;
DefaultCategoryDataset barDataset = null;
DefaultPieDataset pieDataset = null;
// 处理 HTTP get 请求
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
// 清空缓冲区
response.reset();
// 注意这里的MIME类型
response.setContentType("image/png");
String chartType = request.getParameter("chartType");
if (chartType == null)
{
chartType = "bar";
}
JFreeChart chart = null;
if (chartType.equals("pie"))
{
chart = createPieChart();
}
else if (chartType.equals("pie3D"))
{
chart = createPieChart3D();
}
else if (chartType.equals("bar"))
{
chart = createBarChart();
}
else if (chartType.equals("bar3D"))
{
chart = createBarChart3D();
}
ServletOutputStream out = response.getOutputStream();
// 利用ChartUtilities类的writeChartAsPNG方法对图像进行编码
ChartUtilities.writeChartAsPNG(out, chart, width, height);
}
// 处理 HTTP post 请求, 和doGet一样
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException
{
doGet(request, response);
}
// 创建直方图数据集
public void createBarDataset()
{
barDataset = new DefaultCategoryDataset();
for (int i = 0; i < bookTitle.length; i++)
{
for (int j = 0; j < category.length; j++)
{
bookSales = 1+(int)(Math.random() * 100);
barDataset.addValue(bookSales, bookTitle[i], category[j]);
}
}
}
// 创建直方图
public JFreeChart createBarChart()
{
createBarDataset();
JFreeChart chart = ChartFactory.createBarChart
(
chartTitle, // 图表标题
"销售时间:2005年2月", // 坐标标题
"销售量", // 坐标标题
barDataset, // 定义绘制数据
PlotOrientation.VERTICAL, // 直方图的方向
true, // 定义图表是否包含图例
true, // 定义图表是否包含提示
false // 定义图表是否包含URL
);
return chart;
}
// 创建3D直方图
public JFreeChart createBarChart3D()
{
createBarDataset();
JFreeChart chart = ChartFactory.createBarChart3D
(
chartTitle, // 图表标题
"销售时间:2005年2月", // 坐标标题
"销售量", // 坐标标题
barDataset, // 定义绘制数据
PlotOrientation.VERTICAL, // 直方图的方向
true, // 定义图表是否包含图例
true, // 定义图表是否包含提示
false // 定义图表是否包含URL
);
return chart;
}
// 创建饼图数据集
public void createPieDataset()
{
pieDataset = new DefaultPieDataset();
for (int i = 0; i < bookTitle.length; i++)
{
pieDataset.setValue(bookTitle[i], (int)(10+Math.random() * 40));
}
}
// 创建饼图
public JFreeChart createPieChart()
{
createPieDataset();
JFreeChart chart = ChartFactory.createPieChart
(
chartTitle, // 图表标题
pieDataset, // 数据集
true, // 定义图例
true, false);
return chart;
}
// 创建3D饼图
public JFreeChart createPieChart3D()
{
createPieDataset();
JFreeChart chart = ChartFactory.createPieChart3D
(
chartTitle, // 图表标题
pieDataset, // 数据集
true, // 定义图例
true, false);
PiePlot plot = (PiePlot3D)chart.getPlot();
plot.setForegroundAlpha(0.4f);
return chart;
}
}
/**************************************************************************
* (C) Copyright 2004-2005 by Jingkui Zhong(钟京馗) and Huan Tang(唐桓). *
* All Rights Reserved. *
* *
* DISCLAIMER: The authors of this code have used their *
* best efforts in preparing the code. These efforts include the *
* development, research, and testing of the theories and programs *
* to determine their effectiveness. The authors and publisher make *
* no warranty of any kind, expressed or implied, with regard to these *
* programs or to the documentation contained in these codes. The authors *
* shall not be liable in any event for incidental or consequential *
* damages in connection with, or arising out of, the furnishing, *
* performance, or use of these programs. *
**************************************************************************/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -