在实际项目开发中,尤其是报表开发经常要用来热点图片
JAVA的开源项目JfreeChart提供了热点生成图片的方法
这里介绍几种方法
第一在JSP页面中:
<%
...
@ page language="java" pageEncoding="UTF-8"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ include file="/WEB-INF/jsp/include.jsp"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.data.general.DefaultPieDataset"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.chart.*"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.chart.plot.*"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.chart.servlet.ServletUtilities"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.chart.urls.StandardPieURLGenerator"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="org.jfree.chart.entity.StandardEntityCollection"
%>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
@ page import="java.io.*"
%>
<
HTML
>
<
HEAD
>
<
META
http-equiv
=Content-Type
content
="text/html; charset=utf-8"
>
<
TITLE
>
JfreeChart
</
TITLE
>
</
HEAD
>
<
BODY
>
![](https://i-blog.csdnimg.cn/blog_migrate/a41954a27d6ad96fa2c2cf816e677448.gif)
<%
...
DefaultPieDataset data = new DefaultPieDataset();
data.setValue("高中以下",370);
data.setValue("高中",1530);
data.setValue("大专",5700);
data.setValue("本科",8280);
data.setValue("硕士",4420);
data.setValue("博士",80);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
PiePlot3D plot = new PiePlot3D(data);//3D饼图
plot.setURLGenerator(new StandardPieURLGenerator("barview.jsp","lion"));//设定链接
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
chart.setBackgroundPaint(java.awt.Color.white);//可选,设置图片背景色
chart.setTitle("程序员学历情况调查表");//可选,设置图片标题
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
PrintWriter w = new PrintWriter(out);//输出MAP信息
//500是图片长度,300是图片高度
String filename = ServletUtilities.saveChartAsPNG(chart, 500, 300, info, session);
ChartUtilities.writeImageMap(w, "map0", info, false);
String graphURL = request.getContextPath() + "/servletDisplayChart?filename=" + filename;
%>
<
P
ALIGN
="CENTER"
>
<
img
src
="<%= graphURL %>"
width
=500
height
=300
border
=0
usemap
="#map0"
>
</
P
>
</
BODY
>
</
HTML
>
相应的web.xml加入如下配置
<
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
>
/servletDisplayChart
</
url-pattern
>
</
servlet-mapping
>
生成的图片如下
![](https://p-blog.csdn.net/images/p_blog_csdn_net/pluton/servletDisplayChart.png)
该方法引用网站:http://dev.yesky.com/307/2036307.shtml
第二种方法
把java代码写在jsp页面中在大的工程维护起来极不方便,我所用的项目采用Struts框架做表现层
这里我就介绍我所用的方法
java文件:
public
class
ImageAction
extends
Action
...
{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
public ActionForward execute(ActionMapping mapping, ActionForm form,
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
HttpServletRequest request, HttpServletResponse response) ...{
ImageForm image = (ImageForm)form;
int width=0, height=0;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
JFreeChart chart = null;
width = 248;
height = 240;
chart = createEventShareImage();
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
try ...{
StandardEntityCollection sec = new StandardEntityCollection();
ChartRenderingInfo info = new ChartRenderingInfo(sec);
String filename = ServletUtilities.saveChartAsJPEG(chart, width, 240, info, request.getSession());
String mapMessage = ChartUtilities.getImageMap("map0", info);
String src = request.getContextPath()+"/servletDisplayChart?filename=" + filename ;
String useMap = "#" + filename ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
} catch (IOException e) ...{
e.printStackTrace();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
image.setMap(mapMessage);
image.setSrc(src) ;
image.setUseMap(useMap) ;
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return mapping.getInputForward();
}
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/37c8bf68cdc3cc81759c34160776bc53.gif)
private JFreeChart createEventShareImage() ...{
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
Object[] share = eventCommonService.getEventShare();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
DefaultPieDataset pieDataset = new DefaultPieDataset();
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
pieDataset.setValue("严重", new Long("100"));
pieDataset.setValue("高级", new Long("200"));
pieDataset.setValue("中级", new Long("150"));
pieDataset.setValue("低级", new Long("300"));
pieDataset.setValue("轻微", new Long("288"));
PiePlot plot = new PiePlot(pieDataset);
plot.setNoDataMessage("No data available");
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
plot.setSectionPaint("严重", Constant.TERRIBLE_COLOR);
plot.setSectionPaint("高级", Constant.HIGH_COLOR);
plot.setSectionPaint("中级", Constant.MIDDLE_COLOR);
plot.setSectionPaint("低级", Constant.LOW_COLOR);
plot.setSectionPaint("轻微", Constant.INFO_COLOR);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
plot.setLabelGenerator(new StandardPieSectionLabelGenerator("{0} ({2})"));
plot.setURLGenerator(new StandardPieURLGenerator("eventImage.do","type","id"));
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
JFreeChart chart = new JFreeChart("",JFreeChart.DEFAULT_TITLE_FONT, plot, true);
![](https://i-blog.csdnimg.cn/blog_migrate/6a9c071a08f1dae2d3e1c512000eef41.gif)
return chart;
}
jsp页面:
<
bean:write
name
="imageForm"
property
="mapMessage"
filter
="false"
/>
![](https://i-blog.csdnimg.cn/blog_migrate/6810355c2f78c12e91b7997a8e8c583a.gif)
<
img
src
="<bean:write name="
imageForm" property
="src"
/>
" usemap="
<
bean:write
name
="imageForm"
property
="useMap"
/>
"/>
xml的配置和上面一样
生成图片:
![](https://p-blog.csdn.net/images/p_blog_csdn_net/pluton/event.jpg)