JFreeChart在webwork中的應用

來源:互聯網
上載者:User
前言:
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網站。
參考資料:
http://www.jfree.org/jfreechart/index.html
webwork英文文檔

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.