前言: webwork是当今流行的J2EE几大架构之一,在实际的项目中,我们往往要在webwork的输出流中调用一个图表chart,代替直接用response.out输出。那么我们应该怎么样去实现呢?本文将具体阐述JFreeChart在webwork中的应用。本文调试环境为windows2000+tomcat5.0。共分三个部分: 1,JFreeChart 简介 2,webwork简介及webwork,JFreeChart应用环境的配置 3,JFreeChart在webwork中的应用的具体例子 <B>一: JFreeChart 简介:</B> 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 用于处理显示图象; <B>二:webwork简介及webwork,JFreeChart应用环境的配置</B> 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目录下。 <B>三 JFreeChart在webwork中的应用的具体例子</B> 在进行上面的步骤后,我们将要进行具体的开发过程。 步骤:首先在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
|