前言:
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网站。
闽公网安备 35060202000074号