JFreeChart在webwork中的应用

原创 2004年08月11日 20:26:00
前言:
webwork是当今流行的J2EE几大架构之一,在实际的项目中,我们往往要在webwork的输出流中调用一个图表chart,代替直接用response.out输出。那么我们应该怎么样去实现呢?本文将详细阐述JFreeChart在webwork中的应用。本文调试环境为windows2000+tomcat5.0。共分三个部分:
1,JFreeChart 简介 
2,webwork简介及webwork,JFreeChart应用环境的配置
3,JFreeChart在webwork中的应用的具体例子

一: JFreeChart 简介:
JFreeChart是开放源代码项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状图(普通柱状图以及堆栈柱状图)、线图、区域图、分布图、混合图、甘特图以及一些仪表盘等等。
一.JFreeChart创建WEB图表的基本知识
JFreeChart主要是由三个类构成:
org.jfree.chart.servlet.ChartDeleter
org.jfree.chart.servlet.DisplayChart
org.jfree.chart.servlet.ServletUtilities
在下面做一下简单的介绍:
ChartDeleter 继承自HttpSessionBindingListener,用于实现当Session 关闭时,删除
临时目中的图象文件。
ServletUtilities有一系列方法:
saveChartAs*;saveChartAs*是把图表按照不同的形式存储为图象;
sendTempFile方法被重载了很多次,用于把文件流发送response;
DisplayChart继承自Httpservlet 用于处理显示图象;

二:webwork简介及webwork,JFreeChart应用环境的配置
WebWork是一个源代码开放的Web应用框架,用于简化基于Web的应用开发。
WebWork的最大优点是它的简单性和灵活性。WebWork有一个很小的API,它使开发者可以迅速进行开发工作。
WebWork是许多特性和适用性的组合,包括使用variour view技术,
例如JavaServer Pages(JSP),Velocity,Extensible Stylesheet Language Transformations 
Specification(XSLT)和JasperReporters。还有,webwork对JFreechart有非常好的支持。
从这里下载webwork-2.0-beta2.zip。
(
https://webwork.dev.java.net/servlets/ProjectDocumentList)
解压缩文件,你可以在webwork-2.0/lib/optional目录下找到jfreechart-0.9.13.jar。
你也可以从这里下载最新的jfreechart-0.9.15.zip。
http://www.jfree.org/jfreechart/index.html
本文使用的是jfreechart-0.9.15.zip。
web应用的目录结构图如下所示:
/webapp/WEB-INF 
/webapp/WEB-INF/web.xml 
/webapp/WEB-INF/webwork.tld 
/webapp/WEB-INF/classes 
/webapp/WEB-INF/classes/xwork.xml 
/webapp/WEB-INF/lib 
接下来请务必将下面这些包放在/webapp/WEB-INF/lib 目录下。
1。commons-logging.jar 
2。ognl-2.5.1.jar 
3。oscore-2.2.1.jar 
4。xwork-1.0-beta.jar 
5。webwork-2.0-beta.jar 
下面是可以选择的包,具体根据项目需要来决定是否添加: 
cos-multipart.jar 
pell-multipart.jar 
velocity-dep-1.3.jar
2.1 配置你的xwork.xml 
文件像下面例子一样,注意一定要包含webwork-default.xml。
<!DOCTYPE xwork PUBLIC "-//OpenSymphony Group//XWork 1.0//EN" 

"http://www.opensymphony.com/xwork/xwork-1.0.dtd">
<xwork>
    <include file="webwork-default.xml"/>   
   <package name="default" extends="webwork-default">
    ...
    </package>
</xwork>

webwork-default.xml这个文件在webwork-2.0-beta.jar里面。
2.2 修改web.xml文件
修改web.xml文件以包含webwork的设置,如何设置的内容,请察看
$WEBWORK/src/resource/web/WEB-INF/web.xml文件。
2.3 Taglib部分的选择
如果你不打算使用taglib、Velocity、或者XSLT,仅仅只需要在web.xml中不要包含这些内容就可以了。
2.4 Log的设置
Webwork使用log4j,如果你的app server没有安装log4j,你需要增加log4j,复制log4j.jar文件到合适的lib目录。如果你使用tomcat,那么安装目录是$TOMCAT_HOME/lib,当然也可以安装到你的web应用的路径。但需要注意的是如果appserver也适用log4j,你需要小心版本冲突。
2.5 解压缩jfreechart-0.9.15.zip
jfreechart-0.9.15目录下的jfreechart-0.9.15.jar和lib/jcommon-0.9.0.jar,lib/gnujaxp.jar都是开发运行需要的文件,把这三个文件放置到/webapp/WEB-INF/lib目录下。

三 JFreeChart在webwork中的应用的具体例子
在进行上面的步骤后,我们将要进行具体的开发过程。 
步骤:首先在xwork.xml -定义result-types 
   <result-types>
   <result-type name="chart" class="pawpaw.test.ChartResult"/>
   </result-types>

   然后在xwork.xml - 定义action 
<action name="viewModerationChart" class="pawpaw.test.ViewModerationChartAction"> 
  <result name="success" type="chart"> 
    <param name="width">400</param>
    <param name="height">300</param> </result>
</action>

其中param里面定义的是chart图表的长宽。
然后在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>

部分源代码如下:
package pawpaw.test;

import com.opensymphony.webwork.ServletActionContext;
import com.opensymphony.xwork.ActionInvocation;
import com.opensymphony.xwork.Result;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import java.io.OutputStream;
import javax.servlet.http.HttpServletResponse;
/*
 * <p>Description: 把chart文件流换成是通过HttpServletResponse
 *    对象获取到的输出流在浏览器中输出</p>
 * author: pawpaw
 * @version 1.0  12/15/2003
 */

public class ChartResult implements Result {
    JFreeChart chart;
    boolean chartSet = false;
    private int height;
    private int width;

    public void setChart(JFreeChart chart) {
        this.chart = chart;
        chartSet = true;
    }
    //设置图片的长度

    public void setHeight(int height) {
        this.height = height;
    }
    //设置图片的宽度

    public void setWidth(int width) {
        this.width = width;
    }

    public void execute(ActionInvocation invocation) throws Exception {
        JFreeChart chart = null;

        if (chartSet) {
            chart = this.chart;
        } else {
            chart = (JFreeChart) invocation.getStack().findValue("chart");
        }

        if (chart == null) {
            throw new NullPointerException("No chart found");
        }
        
        //把文件流换成是通过HttpServletResponse对象获取到的输出流

        HttpServletResponse response = ServletActionContext.getResponse();
        OutputStream os = response.getOutputStream();
        ChartUtilities.writeChartAsPNG(os, chart, width, height);
        os.flush();
    }
}


创建JFreeChart的action类。
package pawpaw.test;

import java.awt.Insets;
import java.awt.Font;
import java.io.PrintWriter;
import javax.servlet.http.HttpSession;
import org.jfree.data.*;
import org.jfree.chart.*;
import org.jfree.chart.plot.*;
import org.jfree.chart.entity.*;
import org.jfree.chart.urls.*;
import org.jfree.chart.servlet.*;
import org.jfree.chart.labels.StandardPieToolTipGenerator;
import org.jfree.util.Rotation;
import com.opensymphony.xwork.ActionSupport;
/*
 *<p>Description: 输出一条斜线chart</p>
 * author: pawpaw
 * @version 1.0  12/15/2003
 */

public class ViewModerationChartAction extends ActionSupport {   
   private JFreeChart chart;
   public String execute() throws Exception {
      // 创建chart文件数据集

      XYSeries dataSeries = new XYSeries(null);
      for (int i = 0; i <= 100; i++) {
         dataSeries.add(i, RandomUtils.nextInt());
      }
      XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);
            ValueAxis xAxis = new NumberAxis("Raw Marks");//x轴坐标

      ValueAxis yAxis = new NumberAxis("Moderated Marks");//y轴坐标     
      // 设置chart的样式

      chart =new JFreeChart(
            "Moderation Function",// 图表标题

            JFreeChart.DEFAULT_TITLE_FONT,
            new XYPlot(
               xyDataset,
               xAxis,
               yAxis,
               new                         
           StandardXYItemRenderer(StandardXYItemRenderer.LINES)),// 数据集

            false    //是否生成URL链接
            );
      chart.setBackgroundPaint(java.awt.Color.white);  //设置图片的背景色

      Font font = new Font("黑体",Font.CENTER_BASELINE,20);//设置图片标题的字体和大小
      TextTitle _title = new TextTitle(title);
      _title.setFont(font);
      chart.setTitle(_title);
      return super.SUCCESS;
   }   
   public JFreeChart getChart() {
      return chart;
   }
}

小结:这只是一个简单的例子,如果你想深入了解的话,可以参考webwork文档和jfreechart网站。
参考资料:
http://www.jfree.org/jfreechart/index.html
webwork英文文档

WebWork深入浅出

原文链接地址:http://www.blogjava.net/moxie/archive/2006/10/20/76375.html 前言 本篇文章并没有太多WebWork 的实战代码细节。本人非常希...
  • u010955843
  • u010955843
  • 2015年09月09日 16:16
  • 935

浅谈Struts2与Webwork的不同和相同点

浅谈Struts2与Webwork的不同和相同点 2011-06-28 09:14 honeymoose OSS社区 字号:T | T 本文介绍的两大开发框架,Struts ...
  • autumn20080101
  • autumn20080101
  • 2016年05月16日 11:23
  • 1009

jfreechart 实现时间曲线图

jfreechart 实现时间曲线图 一、JFreeChart获取。 JFreeChart是JFreeChart公司在开源网站SourceForge.net上的一个项目,该公司的主要产...
  • qq263229365
  • qq263229365
  • 2013年06月13日 21:27
  • 1349

JFreeChart生成动态折线图

JFreeChart生成动态折线图
  • WSKinght
  • WSKinght
  • 2017年10月20日 14:34
  • 658

关于webwork框架返回JSON数据格式的问题2015-10-27

最近接触到webwork框架,因为项目需求,需要将后台的数据采用json格式返回。 通过百度搜索,找到的方法也很多,但都讲得不够具体,不容易看懂。这里找到一个方法,写了一个返回json的类继...
  • neil89
  • neil89
  • 2015年10月27日 16:08
  • 1337

JFreeChart图像报表教程- 带图

jfreechart是jfree公司提供的一个Java项目,它主要用来实现各种图表,包括:饼图,柱状图(普通柱状图和堆栈柱状图),折线图,区域图,分布图,混合图,甘特图,以及一些仪表盘等。 官方...
  • yuexianchang
  • yuexianchang
  • 2016年11月22日 22:31
  • 2373

WebWork框架的处理流程

都说Struts 2与Struts 1相差太大,Struts 2是从webWrok发展而来的,那什么是WebWord呢??看看下面的介绍. 1.3.1 WebWork框架 WebWork ...
  • chenzhengdui
  • chenzhengdui
  • 2014年05月05日 09:07
  • 942

解决jfreechart中文乱码,以及字体模糊,设置主题问题

发现一篇博客解决了我的乱码问题,复制过来分享下。package cn.com.gwypx.util; import java.awt.Color; import java.awt.Font; imp...
  • onlybacksfa
  • onlybacksfa
  • 2015年06月23日 17:39
  • 1214

JFreeChart使用总结(四)

JFreeChart使用总结 1. JFreeChart简介 JFreeChart是开放源代码站点SourceForge.net上的一个JAVA项目,它主要用来各种各样的图表,这些图表包括:饼图、柱状...
  • lvyuan30276
  • lvyuan30276
  • 2016年12月13日 18:41
  • 1535

开源和收费图表工具对比:JFreeChart vs ChartDirector

今天跟大家分享一下JFreeChart和ChartDirector的对比分析,这两个都是web图表开发工具,前者是开源的,后者是不开源的收费控件。 JFreeChart是 Java平台下开源的的图表...
  • dyllove98
  • dyllove98
  • 2013年03月21日 16:06
  • 3347
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JFreeChart在webwork中的应用
举报原因:
原因补充:

(最多只允许输入30个字)