web.xml配置JFreeChart
<servlet>
<servlet-name>jfreechart</servlet-name>
<servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>jfreechart</servlet-name>
<url-pattern>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
折线图的业务实现:
import java.awt.Font;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.ServletContext;
import javax.servlet.http.HttpServletRequest;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
/**
* 生成折线图
*/
public String makeLine(String lineName, String xName, String yName ,int width ,int height,HttpServletRequest request) {
List<String[]> data = dateList();
CategoryDataset linedataset = this.getDataSet(data);
JFreeChart chart = ChartFactory.createLineChart(lineName, // chart title
xName, // domain axis label
yName, // range axis label
linedataset, // data
PlotOrientation.VERTICAL, // orientation
true, // include legend
true, // tooltips
false // urls
);
setImageFont(chart);
CategoryPlot line = chart.getCategoryPlot();
// customise the range axis...
NumberAxis rangeAxis = (NumberAxis) line.getRangeAxis();
rangeAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
rangeAxis.setAutoRangeIncludesZero(true);
rangeAxis.setUpperMargin(0.20);
rangeAxis.setLabelAngle(Math.PI / 2.0);
line.setRangeAxis(rangeAxis);
String imagePath_area=null;
try {
//生成图片
String filename = ServletUtilities.saveChartAsPNG(chart, 600, 400, null, request.getSession());
ServletContext servlet = request.getServletContext();
//得到功能路径
imagePath_area = servlet.getContextPath() + "/servlet/DisplayChart?filename=" + filename;
}catch(Exception e){
e.printStackTrace();
}
System.out.println("结束");
return imagePath_area;
}
/**
* 解决乱码问题
*/
private void setImageFont(JFreeChart chart)
{
CategoryPlot plot = (CategoryPlot)chart.getPlot();
CategoryAxis domainAxis = plot.getDomainAxis();
ValueAxis numberaxis = plot.getRangeAxis();
//设置标题文字
chart.getTitle().setFont(new Font("宋体", Font.BOLD, 12));
//设置X轴坐标上的文字
domainAxis.setTickLabelFont(new Font("黑体", Font.PLAIN, 11));
//设置X 轴的标题文字
domainAxis.setLabelFont(new Font("宋体", Font.PLAIN, 12));
//设置Y 轴坐标上的文字
numberaxis.setTickLabelFont(new Font("sans-serif", Font.PLAIN, 12));
//设置Y 轴的标题文字
numberaxis.setLabelFont(new Font("黑体", Font.PLAIN, 12));
//设置底部文字
chart.getLegend().setItemFont(new Font("宋体", Font.PLAIN, 12));
}
//构建数据
private CategoryDataset getDataSet(List<String[]> data){
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
for(String[] ss : data){
dataset.addValue(Double.valueOf(ss[0]), ss[1], ss[2]);
}
return dataset;
}
public List<String[]> dateList(){
List<String[]> list = new ArrayList<String[]>();
String[] s1 = {"10" ,"北京" ,"2010"};
String[] s2 = {"15" ,"北京" ,"2011"};
String[] s3 = {"20" ,"北京" ,"2012"};
String[] s4 = {"13" ,"北京" ,"2013"};
String[] s5 = {"17" ,"北京" ,"2014"};
String[] s6 = {"50" ,"北京" ,"2015"};
String[] z1 = {"25" ,"上海" ,"2010"};
String[] z2 = {"30" ,"上海" ,"2011"};
String[] z3 = {"5" ,"上海" ,"2012"};
String[] z4 = {"60" ,"上海" ,"2013"};
String[] z5 = {"30" ,"上海" ,"2014"};
String[] z6 = {"0" ,"上海" ,"2015"};
list.add(s1);
list.add(s2);
list.add(s3);
list.add(s4);
list.add(s5);
list.add(s6);
list.add(z1);
list.add(z2);
list.add(z3);
list.add(z4);
list.add(z5);
list.add(z6);
return list;
}
Spring MVC Controller 控制器
@RequestMapping("/getAllReportRule")
public ModelAndView getAllReportRule(HttpServletRequest request, HttpServletResponse response,
ReportRuleInfo reportRule) throws Exception
{
//创建LineDraw对象,调用makeLine方法得到折线图
LineDraw lineDraw = new LineDraw();
String fileName= lineDraw.makeLine("测试图", "年份", "吨", 600, 500, request);
List<ReportRuleInfo> reportList = reportService.getAllReportRule(reportRule);
request.setAttribute("reportList", reportList);
request.setAttribute("report", reportRule);
//把得到的图片放到request范围里面
request.setAttribute("fileName", fileName);
return new ModelAndView("warning/report_rule_list");
}
JSP页面代码:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>折线图显示</title>
</script>
</head>
<body>
<table width="99%" cellpadding="0" cellspacing="0" border="0"
align="center">
<tr>
<td>
<img alt="abc" src="${fileName}">
</td>
</tr>
</table>
</body>
</html>