注解:以下步骤最好能够结合jfreechart的源代码
查看了jfreechart组件的源代码后,发现该组件生成Web报表图片的流程大致分为以下两个步骤:
第一步: 图片文件的创建
1.通过org.jfree.chart包下的ChartFactory工厂类提供的一些静态方法创建一个JFreeChart类型的对象。
2.通过org.jfree.chart.servlet包下的ServletUtilities类提供的一些静态保存方法保存生成的图片并返回图片的名字。
下面讲解一下第二步的过程:
注解:ServletUtilities类的saveChartAsJPEG()方法做了如下操作:
a.通过调用ServletUtilities类的createTempDir()临时目录创建方法,确保当前应用程序运行环境(如Web服务器)的临时目录(temp)是否存在,若不
存在,则创建它。
b.确定图片文件的前缀部分,若session为空,则标记为即时文件(即访问到该图片后立刻删掉该图片文件),否则标记为临时文件(即等
到用户会话失效后才删除生成的临时图片文件)。
注:String prefix = ServletUtilities.tempFilePrefix;//临时文件
if (session == null) {
prefix = ServletUtilities.tempOneTimeFilePrefix;//即时文件
}
c.创建一个空图片文件对象:
File tempFile = File.createTempFile(prefix, ".jpeg",new File(System.getProperty("java.io.tmpdir")));
d.通过调用org.jfree.chart包下的ChartUtilities类的保存方法将组件画出的图片对象写入刚才生成的空图片文件中:
ChartUtilities.saveChartAsJPEG(tempFile, chart, width, height, info);
e.如果session不为空,则将该文件注册到org.jfree.chart.servlet包下的ChartDeleter类的集合中,这个类实现了
HttpSessionBindingListener监听接口,等到用户会话session失效时,系统将删除所有的临时图片文件,但不知为何
没有看到效果???????????????
f.返回生成图片文件名称(return tempFile.getName())。
第二步:图片文件的读取
注解:该组件专门提供了一个访问图片的Servlet,它在org.jfree.chart.servlet包里,名为DisplayChart。
1.必须在Web程序的web.xml中配置这个servlet。具体配置如下:
<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>/servlet/DisplayChart</url-pattern>
</servlet-mapping>
其中<servlet-name>和<url-pattern>可以自定义,而<servlet-class>取决于它在你那个组件的位置。
2.在图片业务逻辑类部分定义图片访问路径,并将其保存到作用域。
a.String fileUrl = (DisplayChart servlet)配置的 url-pattern + "?filename = " + 第一步返回的图片名字;
b.request.setAttribute("fileUrl", fileUrl);
3.在图片显示页面操作如下:
<img src="${requestScope.fileUrl}"/>或者<img src="<%=request.getParameter("fileUrl")%>"/>