您的位置:首页 > 其它

关于jfreechart创建web报表图片的流程初解

2008-04-01 11:18 267 查看
注解:以下步骤最好能够结合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")%>"/>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: