Servlet中的JFreeChart应用

时间:2022-09-19 08:02:26

JFreeChart直接在Servlet中进行web开发,它的用法跟Struts2下的配置是不一样的。首先用到的jar,只需要两个分别是:jcommon-1.0.23.jar,jfreechart-1.0.19.jar。将这两个jar包放到lib里面就可以了,然后就是配置web.xml文件。

Servlet中的JFreeChart应用

web.xml中的配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
  <display-name>JFreeChart_demo_servlet</display-name>
  <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>/DisplayChart</url-pattern>
  </servlet-mapping>
</web-app>

配置完成环境就OK了!

然后在com.study.chart包下,新建PieChartUtil类,其中代码如下:

public class PieChartUtil {

public static PieDataset initPieData(){
//设置数据
DefaultPieDataset dataset = new DefaultPieDataset();
dataset.setValue("Java", 500);
dataset.setValue("C/C++", 120);
dataset.setValue("PHP", 420);
dataset.setValue(".Net", 480);
return dataset;
}

public static JFreeChart createPieChart() {

JFreeChart pieChart = ChartFactory.createPieChart3D(
"web开发语言",  //标题
initPieData(),//数据
true,// 是否显示图例
true,//是否显示工具提示
false//是否生成URL
);

pieChart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));
pieChart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));

PiePlot plot = (PiePlot) pieChart.getPlot();//获得饼图的Plot对象
plot.setLabelFont(new Font("宋体", Font.PLAIN, 12));
// 图片中显示百分比:自定义方式,{0} 表示选项, {1} 表示数值, {2} 表示所占比例 ,小数点后两位
// plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{1}({2})", NumberFormat.getNumberInstance(),
//new DecimalFormat("0.00%")));

plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0}:{2}", NumberFormat.getNumberInstance(), NumberFormat.getPercentInstance()));
return pieChart;
}

        public static String generatePieChart(HttpSession session, PrintWriter pw){

String filename = null;
JFreeChart chart = createPieChart();
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());
try {
//saveChartAsPNG生成PNG图片,并返回文件名
filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
} catch (IOException e) {
e.printStackTrace();
}
try {
ChartUtilities.writeImageMap(pw, filename, info, false);//将生成的图片写入到输出流
} catch (IOException e) {
e.printStackTrace();
}
pw.flush();
return filename;
}
}

最后就是新建一个jsp页面,pieChart.jsp来显示图表,代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="com.study.chart.*, java.io.*" %>
<%
String filename = PieChartUtil.generatePieChart(session, new PrintWriter(out));
String graphURL = request.getContextPath() + "/DisplayChart?filename="+filename;

%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>pieChart</title>
</head>
<body leftmargin=10 topmargin=10>
<img src="<%=graphURL %>" width=500 height=300 border = 0>
</body>
</html>

显示出来的结果如下:

Servlet中的JFreeChart应用

其中要注意的就是,在PieChartUtil类,如果不对标题等文字进行字体设置就会出现如下结果:

Servlet中的JFreeChart应用

网上百度之类搜索,说JFreeChart开发时出现的中文乱码问题,原因就是因为其默认设置的字体不存在,大概就是这样,所以就要对字体进行设置:pieChart.getTitle().setFont(new Font("隶书", Font.BOLD, 25));

pieChart.getLegend().setItemFont(new Font("宋体", Font.BOLD, 15));

plot.setLabelFont(new Font("宋体", Font.PLAIN, 12));

这只是个简单的例子,还有很多的内容可以设置,后面再跟大家一起学习,有好建议的,请各位前辈指出,让我这个菜鸟好好学着!Servlet中的JFreeChart应用