程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> JFreeChart在Webwork中的應用

JFreeChart在Webwork中的應用

編輯:關於JAVA

前言:

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網站。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved