`
ASDF1982
  • 浏览: 18275 次
  • 性别: Icon_minigender_1
  • 来自: dalian
社区版块
存档分类
最新评论

JFreeChart图表生成在内存中,在页面显示的问题

阅读更多
有一个需求: 项目是BS的结构,想用JFreeChart来生成图表,图片显示的数据是从数据库里实时读取的,

有两种打算:
          一种想法是用户请求的时候在服务器中生成图片并保存在服务器的一个文件夹里面.
        一种想法是在内存中生成图片用户请求完毕后关闭流.

首先想问一下在用户端显示图片是不是下面的流程:

   用户首先发出请求到服务器端,服务器端接受请求并生成HTML文档发送到客户端,之后浏揽器装载文件,遇到图片文件先在本地找,找不到的话根据url向服务器发送请求,服务器端有一个写图片的数据流把图片写到本地客户端的一个临时文件夹下,浏览器,这时候图片就显示了.


我想问的问题是
    1.这个流程对不对.
   2.如果是bs结构应用我把生成的图片存在内存中的话,我怎么样控制生成图片的流的创建和关闭呢
       在什么时候创建,什么时候关闭呢.
   3.两种方法哪个更好一些.或者还有更好的方法..
分享到:
评论
15 楼 voff12 2007-03-19  
楼上的肯定不是最优解,一个小小的东东,就要弄个server来支持,更大的浪费!!
14 楼 roger 2007-03-19  
没必要复杂化,就直接用第2种,如果性能有问题,单独弄个server做图片server
13 楼 voff12 2007-03-19  
能不能再具体一点?如果每次请求都生成一次,那就太浪费资源了,速度也会下降。可不可做个触发器,数据更新后,马上就生成图片,然后存下来。如果没有数据更新,就调用原因的图片?
12 楼 gumpgz 2007-03-19  
采用第一种做法,并使用listener来清除服务器上的图片。
这是最通用的做法。
11 楼 chengren 2007-03-16  
我就是在回答你的问题啊。因为你的这种2种打算都有漏洞啊。
1.生成文件的方法,产生的文件怎么维护呢?
2.至于动态流的方法则是对服务器资源的严重浪费。。。

当然如果你的工作必须要求你在这两种方法中选择的话,那么推荐的选择方法就是,你业务的重复性是否比较高呢?如果比较高的话,就采用生成文件的方式,尽量重用生成的图片,如果没有重用图片可能性的情况,你也就剩下动态流的输出了。
10 楼 jfy3d 2007-03-16  
java虫 写道



我用这个方法自己做过实验,生成速度还可以。就是用jfreechart生成的图片字体不太清晰感觉。


自体不清晰可以看看这个
http://www.blogjava.net/jfy3d/archive/2005/12/06/22804.html
9 楼 jfy3d 2007-03-16  
如果动态生成图片(方法2)
<img src="../image/jfree.jpeg">
实际是写servlet路径
<img src="../showimg.do">
showimg.do里生成图片然后response出来
8 楼 java虫 2007-03-16  

采用工具类ChartUtil和DisplayChart(jfreechart的servlet)输出

将javabean里的生成图片的方法写的一个工具类ChartUtil里面。

1 .添加工具类ChartUtil
public class ChartUtil {
// 产生时间序列图,返回图片名称
public  static String generatePieChart(DefaultPieDataset dataset,String title,int width,int height,HttpSession session, PrintWriter pw) {    
  
String filename = null;    
 try {    
 if (session != null)    
 {    
ChartDeleter deleter = (ChartDeleter)session.getAttribute("JFreeChart_Deleter");    
 session.removeAttribute("JFreeChart_Deleter");    
 session.setAttribute("JFreeChart_Deleter", deleter);    
}    
JFreeChart chart = ChartFactory.createPieChart3D(    
title,  // chart title    
dataset, // data    
true,  // include legend    
true,    
false );    
//  Write the chart image to the temporary directory    
ChartRenderingInfo info = new ChartRenderingInfo(new StandardEntityCollection());    
//If the last parameter is null, the chart is a "one time"-chart and will be deleted after the first serving.    
//If the last parameter is a session object, the chart remains until session time out.    
filename = ServletUtilities.saveChartAsPNG(chart, width, height, info, session);    
//  Write the image map to the PrintWriter    
 ChartUtilities.writeImageMap(pw, filename, info,true);    
 pw.flush();    
} catch (Exception e) {    
 System.out.println("Exception - " + e.toString());    
 e.printStackTrace(System.out);    
 filename = "picture_error.png"; }    
return filename;    
}    
}   


2、在action里统计数据,设置好数据集dataset。传到页面

3、 在页面里取出
DefaultPieDataset piedataset=(DefaultPieDataset)request.getAttribute("piedataset"); 
String p = ChartUtil.generatePieChart(piedataset," 项目收支线图",500,300,null, new PrintWriter(out));    
String p1 = request.getContextPath() + "/servlet/DisplayChart?filename=" + p;


<td><img src="<%= p1 %>" width=500 height=300 border=0 usemap="#<%= p %>"></td>  


4、在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>/servlet/DisplayChart</url-pattern>  
</servlet-mapping>


我用这个方法自己做过实验,生成速度还可以。就是用jfreechart生成的图片字体不太清晰感觉。
7 楼 ASDF1982 2007-03-16  
jfy3d 写道
你本行不是作B/S方面的吧 描述的象socket
IE 下载完图片 这个请求就完成了

不需要你还关闭什么阿,你能写代码提前或推后关闭?


似乎明白点,不过这样一来的话 因为图片是在内存里的
那么在页面上这样写<img src="../image/jfree.jpeg">的话浏揽器又怎么访问这个路径呢
6 楼 ASDF1982 2007-03-16  
谢谢楼上的提醒,不过现在我问的问题能否帮助解答下
5 楼 chengren 2007-03-16  
如果你是在浏览器中展现图表的话,除非特定要求,否则尽量避免使用JFreeChart这种解决方案,性能和表现力都会成为你的很大的障碍。
flash,Javascript,vml应该都可以考虑。
4 楼 giscat 2007-03-16  
用第一种就可以了
3 楼 jfy3d 2007-03-16  
你本行不是作B/S方面的吧 描述的象socket
IE 下载完图片 这个请求就完成了

不需要你还关闭什么阿,你能写代码提前或推后关闭?
2 楼 ASDF1982 2007-03-16  
关键是BS结构 怎么知道什么时候关闭呢 我如果提前关闭了
那浏缆器还没加载怎么办?
1 楼 jfy3d 2007-03-16  
第一种适合可共享的图表,实时要求不是非常非常高的,很好的减少压力

第二种适合个例的,每个用户看到或查询都是不一样的。
第二种out完了应该就关闭了

相关推荐

    JSP使用JFreeChart生成各种图表并生成PDF文档

    在Java Web开发中,JSP(JavaServer Pages)是一种用于创建动态网页的技术,而JFreeChart和IText是两个强大的库,分别用于生成各种图表和PDF文档。本篇将详细介绍如何利用JSP结合这两个库来实现数据可视化和文档生成...

    《精通Java Web动态图表编程》附JFreeChart -- web图表生成源码

    分享提高图表生成性能的方法,以及在遇到问题时如何进行调试。这部分内容对于大型项目尤其重要,确保图表的生成速度和内存使用都达到理想状态。 9. **第九章:实战案例分析** 提供具体的案例研究,演示如何在实际...

    信息查询系统--JFreeChart图表显示,分页,验证码,下载excle

    它可以避免一次性加载过多数据导致的页面响应慢或者内存溢出问题,同时提升用户体验。在信息查询系统中,我们可以通过设置每页显示条目数,结合数据库查询的LIMIT和OFFSET方法,实现在后台动态加载分页数据。前端...

    Struts2整合JFreeChart图表

    5. **转换为图像**:为了在Web上显示,JFreeChart生成的图表需要转化为位图图像,通常使用`ChartUtilities.writeChartAsJPEG()`或`writeChartAsPNG()`方法将图表写入内存流。 6. **Struts2 Action的配置**:在...

    用JFreeChart在网页中实现Gantt图

    在JSP页面中使用JFreeChart,我们可以将项目数据转换为可视化图表,使用户能够直观地看到项目的进度和时间安排。 首先,你需要在项目中添加JFreeChart的依赖。这通常可以通过Maven或Gradle来完成,确保在pom.xml或...

    利用jfreechart实现企业图表

    总结来说,结合JFreeChart和Servlet技术,我们可以构建一个高效、可定制的企业级图表生成系统。通过MySQL数据库和连接池技术,我们可以实现稳定且性能良好的数据访问。这种解决方案广泛应用于数据分析、报表生成、...

    JFreeChart插件显示图+jar包

    总之,JFreeChart 提供了一种简单而强大的方式来在 Java 应用中生成高质量的图表。通过正确配置项目依赖、XML 配置文件和 Action 类,我们可以轻松地创建并展示柱状图,同时调整图表的各种属性,如柱子的宽度和大小...

    jfreechart与struts2结合,实现折线图、饼状图、柱状图的页面显示

    总结起来,通过结合JFreeChart的图表生成能力和Struts2的MVC架构,我们可以创建出交互式的Web应用,动态地在页面上展示各种数据图表。这个过程涉及到对JFreeChart API的深入理解和Struts2的Action及Result配置。如果...

    struts2与jfreechart整合

    Struts2是一个基于MVC设计模式的Web应用框架,用于构建动态、数据驱动的Java Web应用,而JFreeChart则是一个强大的图表生成库,可以生成各种类型的图表,如柱状图、饼图、线图等,广泛应用于数据分析和展示。...

    Web中JFreeChart图形报表小例子

    在Web环境中,通常我们会将JFreeChart的生成结果转换为PNG或JPEG等静态图像格式,然后在JSP页面上通过`&lt;img&gt;`标签显示。在这个例子中,我们可能需要在Struts 2的Action中处理生成图表的逻辑,如下所示: ```java ...

    Struts2+JFreeChart开发所用Jar包

    6. **测试和优化**:最后,对整个流程进行测试,检查图表是否正确显示,同时根据性能需求进行优化,如减少内存消耗、提高图表生成速度等。 总之,Struts2+JFreeChart的组合为Java Web应用提供了强大的报表和图表...

    java+struts2实现图表显示

    6. **JSP页面**:在JSP页面中,使用`&lt;img&gt;`标签显示图表。设置`src`属性为Struts2的Action路径,同时设置响应类型为图片类型(如`image/png`)。 7. **响应头设置**:在Struts2的Action中,设置响应头的Content-...

    Struts2中使用JfreeChart

    5. **在视图中展示**:在JSP页面中,可以使用`&lt;img&gt;`标签引用生成的图表。例如: ```html &lt;img src="&lt;s:url action='generateChart'/&gt;" alt="Chart"/&gt; ``` Struts2的`&lt;s:url&gt;`标签会生成指向Action的URL,从而在...

    jfreechart

    - 性能优化:提升了图表生成速度,降低了内存占用。 - 新增图表类型:增加了对新的图表类型的支持,例如某些专业领域的特定图表。 - API 简化:可能对 API 进行了重构,使其更易于理解和使用。 - 兼容性增强:改进了...

    jfreeChart开发指南

    对于Web应用,还会讲解如何将图表嵌入到HTML页面中,或者通过JavaServer Pages (JSP)和Servlets动态生成图表。 在移动应用和手机游戏方面,JFreeChart虽然最初设计用于桌面环境,但其轻量级特性使其也能适应J2ME...

    struts2整合jfreechart代码

    将JFreeChart与Struts2整合,可以方便地在Web应用中展示动态生成的图表,为用户提供直观的数据表示。 整合JFreeChart和Struts2的过程主要包括以下几个步骤: 1. **添加依赖**:首先,在项目的类路径中需要包含...

    struts2整合jfreechart

    本实例将讲解如何在Struts2框架中整合JFreeChart,以实现动态生成图表的功能。 首先,确保你已经安装了Struts2框架,并且在项目中配置了Struts2的核心库。这通常包括添加struts2-core.jar到类路径中,并在web.xml中...

    JFreeChart 实例

    通过以上步骤,你可以在JSP页面中成功地集成和展示JFreeChart图表。值得注意的是,JFreeChart还有许多高级功能,如动态更新图表、交互式图表以及自定义绘图策略等,这都需要进一步学习和实践。 总之,JFreeChart为...

    JfreeChart包下载

    JFreeChart是一款强大的Java图表库,专为开发人员提供,用于在应用程序、报表或Web应用中生成高质量的图形。这款开源库支持多种图表类型,包括柱状图、饼图、线形图、散点图、甘特图、面积图以及时间序列图表等,...

Global site tag (gtag.js) - Google Analytics