JFreeChart在webwork中的应用

来源:百度文库 编辑:神马文学网 时间:2024/04/25 18:16:09
pawpaw 原创  (参与分:6096,专家分:130)   发表:2003-12-19 20:38   更新:2003-12-20 08:17   版本:1.0   阅读:5964次
前言:
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。
                ...     
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
       
然后在xwork.xml - 定义action
          400     300 
其中param里面定义的是chart图表的长宽。
然后在web.xml文件中增加以下内容:
        DisplayChart         org.jfree.chart.servlet.DisplayChart                   DisplayChart         /servletDisplayChart     
部分源代码如下:
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; /*  * 

Description: 把chart文件流换成是通过HttpServletResponse  *    对象获取到的输出流在浏览器中输出

 * 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; /*  *

Description: 输出一条斜线chart

 * 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英文文档