JFreeChart在Webwork中的应用

 前言:

  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.0liboptional目录下找到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_HOMElib,当然也可以安装到你的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;
}
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值