Terry.Li-彬

          虛其心,可解天下之問;專其心,可治天下之學(xué);靜其心,可悟天下之理;恒其心,可成天下之業(yè)。

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            143 隨筆 :: 344 文章 :: 130 評論 :: 0 Trackbacks
          前言:
            webwork是當(dāng)今流行的J2EE幾大架構(gòu)之一,在實際的項目中,我們往往要在webwork的輸出流中調(diào)用一個圖表chart,代替直接用response.out輸出。那么我們應(yīng)該怎么樣去實現(xiàn)呢?本文將詳細(xì)闡述JFreeChart在webwork中的應(yīng)用。本文調(diào)試環(huán)境為windows2000+tomcat5.0。共分三個部分:
            1,JFreeChart 簡介
            2,webwork簡介及webwork,JFreeChart應(yīng)用環(huán)境的配置
            3,JFreeChart在webwork中的應(yīng)用的具體例子
            
            <B>一: JFreeChart 簡介:</B>
            JFreeChart是開放源代碼項目,它主要用來各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。
            一.JFreeChart創(chuàng)建WEB圖表的基本知識
            JFreeChart主要是由三個類構(gòu)成:
            org.jfree.chart.servlet.ChartDeleter
            org.jfree.chart.servlet.DisplayChart
            org.jfree.chart.servlet.ServletUtilities
            在下面做一下簡單的介紹:
            ChartDeleter 繼承自HttpSessionBindingListener,用于實現(xiàn)當(dāng)Session 關(guān)閉時,刪除
            臨時目中的圖象文件。
            ServletUtilities有一系列方法:
            saveChartAs*;saveChartAs*是把圖表按照不同的形式存儲為圖象;
            sendTempFile方法被重載了很多次,用于把文件流發(fā)送response;
            DisplayChart繼承自Httpservlet 用于處理顯示圖象;
            
            <B>二:webwork簡介及webwork,JFreeChart應(yīng)用環(huán)境的配置</B>
            WebWork是一個源代碼開放的Web應(yīng)用框架,用于簡化基于Web的應(yīng)用開發(fā)。
            WebWork的最大優(yōu)點是它的簡單性和靈活性。WebWork有一個很小的API,它使開發(fā)者可以迅速進(jìn)行開發(fā)工作。
            WebWork是許多特性和適用性的組合,包括使用variour view技術(shù),
            例如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目錄下找到j(luò)freechart-0.9.13.jar。
            你也可以從這里下載最新的jfreechart-0.9.15.zip。
            (http://www.jfree.org/jfreechart/index.html)
            本文使用的是jfreechart-0.9.15.zip。
            web應(yīng)用的目錄結(jié)構(gòu)圖如下所示:
            /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
            接下來請務(wù)必將下面這些包放在/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
            下面是可以選擇的包,具體根據(jù)項目需要來決定是否添加:
            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的設(shè)置,如何設(shè)置的內(nèi)容,請察看
            $WEBWORK/src/resource/web/WEB-INF/web.xml文件。
            2.3 Taglib部分的選擇
            如果你不打算使用taglib、Velocity、或者XSLT,僅僅只需要在web.xml中不要包含這些內(nèi)容就可以了。
            2.4 Log的設(shè)置
            Webwork使用log4j,如果你的app server沒有安裝log4j,你需要增加log4j,復(fù)制log4j.jar文件到合適的lib目錄。如果你使用tomcat,那么安裝目錄是$TOMCAT_HOME\lib,當(dāng)然也可以安裝到你的web應(yīng)用的路徑。但需要注意的是如果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都是開發(fā)運行需要的文件,把這三個文件放置到/webapp/WEB-INF/lib目錄下。
            
            <B>三 JFreeChart在webwork中的應(yīng)用的具體例子</B>
            在進(jìn)行上面的步驟后,我們將要進(jìn)行具體的開發(fā)過程。
            步驟:首先在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文件中增加以下內(nèi)容:
              <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;
              }
              //設(shè)置圖片的長度
              public void setHeight(int height) {
                this.height = height;
              }
              //設(shè)置圖片的寬度
              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();
              }
            }
            創(chuàng)建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 {
               // 創(chuàng)建chart文件數(shù)據(jù)集
               XYSeries dataSeries = new XYSeries(null);
               for
          posted on 2007-09-11 10:17 禮物 閱讀(263) 評論(0)  編輯  收藏 所屬分類: 報表
          主站蜘蛛池模板: 当涂县| 柏乡县| 甘孜县| 宝山区| 珲春市| 东乌珠穆沁旗| 宜春市| 海南省| 米泉市| 旅游| 永济市| 岢岚县| 都昌县| 南投县| 五家渠市| 天津市| 布拖县| 资源县| 蒙阴县| 湖口县| 张家口市| 法库县| 镇安县| 高安市| 沙湾县| 上思县| 高清| 北流市| 恭城| 绥芬河市| 宁强县| 容城县| 河南省| 盐亭县| 双江| 科技| 大埔区| 庆阳市| 威海市| 云霄县| 启东市|