posts - 78,  comments - 48,  trackbacks - 0
          前言:
          webwork是當(dāng)今流行的J2EE幾大架構(gòu)之一,在實(shí)際的項(xiàng)目中,我們往往要在webwork的輸出流中調(diào)用一個(gè)圖表chart,代替直接用response.out輸出。那么我們應(yīng)該怎么樣去實(shí)現(xiàn)呢?本文將詳細(xì)闡述JFreeChart在webwork中的應(yīng)用。本文調(diào)試環(huán)境為windows2000+tomcat5.0。共分三個(gè)部分:
          1,JFreeChart 簡(jiǎn)介
          2,webwork簡(jiǎn)介及webwork,JFreeChart應(yīng)用環(huán)境的配置
          3,JFreeChart在webwork中的應(yīng)用的具體例子

          一: JFreeChart 簡(jiǎn)介:
          JFreeChart是開(kāi)放源代碼項(xiàng)目,它主要用來(lái)各種各樣的圖表,這些圖表包括:餅圖、柱狀圖(普通柱狀圖以及堆棧柱狀圖)、線圖、區(qū)域圖、分布圖、混合圖、甘特圖以及一些儀表盤等等。
          一.JFreeChart創(chuàng)建WEB圖表的基本知識(shí)
          JFreeChart主要是由三個(gè)類構(gòu)成:
          org.jfree.chart.servlet.ChartDeleter
          org.jfree.chart.servlet.DisplayChart
          org.jfree.chart.servlet.ServletUtilities
          在下面做一下簡(jiǎn)單的介紹:
          ChartDeleter 繼承自HttpSessionBindingListener,用于實(shí)現(xiàn)當(dāng)Session 關(guān)閉時(shí),刪除
          臨時(shí)目中的圖象文件。
          ServletUtilities有一系列方法:
          saveChartAs*;saveChartAs*是把圖表按照不同的形式存儲(chǔ)為圖象;
          sendTempFile方法被重載了很多次,用于把文件流發(fā)送response;
          DisplayChart繼承自Httpservlet 用于處理顯示圖象;

          二:webwork簡(jiǎn)介及webwork,JFreeChart應(yīng)用環(huán)境的配置
          WebWork是一個(gè)源代碼開(kāi)放的Web應(yīng)用框架,用于簡(jiǎn)化基于Web的應(yīng)用開(kāi)發(fā)。
          WebWork的最大優(yōu)點(diǎn)是它的簡(jiǎn)單性和靈活性。WebWork有一個(gè)很小的API,它使開(kāi)發(fā)者可以迅速進(jìn)行開(kāi)發(fā)工作。
          WebWork是許多特性和適用性的組合,包括使用variour view技術(shù),
          例如JavaServer Pages(JSP),Velocity,Extensible Stylesheet Language Transformations
          Specification(XSLT)和JasperReporters。還有,webwork對(duì)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
          接下來(lái)請(qǐng)務(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ù)項(xiàng)目需要來(lái)決定是否添加:
          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"

          "<xwork>
              <include file="webwork-default.xml"/>  
             <package name="default" extends="webwork-default">
              ...
              </package>
          </xwork>

          webwork-default.xml這個(gè)文件在webwork-2.0-beta.jar里面。
          2.2 修改web.xml文件
          修改web.xml文件以包含webwork的設(shè)置,如何設(shè)置的內(nèi)容,請(qǐng)察看
          $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沒(méi)有安裝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都是開(kāi)發(fā)運(yùn)行需要的文件,把這三個(gè)文件放置到/webapp/WEB-INF/lib目錄下。

          三 JFreeChart在webwork中的應(yīng)用的具體例子
          在進(jìn)行上面的步驟后,我們將要進(jìn)行具體的開(kāi)發(fā)過(guò)程。
          步驟:首先在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圖表的長(zhǎng)寬。
          然后在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文件流換成是通過(guò)HttpServletResponse
           *    對(duì)象獲取到的輸出流在瀏覽器中輸出</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è)置圖片的長(zhǎng)度
              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");
                  }
                 
                  //把文件流換成是通過(guò)HttpServletResponse對(duì)象獲取到的輸出流
                  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 (int i = 0; i <= 100; i++) {
                   dataSeries.add(i, RandomUtils.nextInt());
                }
                XYSeriesCollection xyDataset = new XYSeriesCollection(dataSeries);
                      ValueAxis xAxis = new NumberAxis("Raw Marks");//x軸坐標(biāo)
                ValueAxis yAxis = new NumberAxis("Moderated Marks");//y軸坐標(biāo)    
                // 設(shè)置chart的樣式
                chart =new JFreeChart(
                      "Moderation Function",// 圖表標(biāo)題
                      JFreeChart.DEFAULT_TITLE_FONT,
                      new XYPlot(
                         xyDataset,
                         xAxis,
                         yAxis,
                         new                        
                     StandardXYItemRenderer(StandardXYItemRenderer.LINES)),// 數(shù)據(jù)集
                      false    //是否生成URL鏈接
                      );
                chart.setBackgroundPaint(java.awt.Color.white);  //設(shè)置圖片的背景色
                Font font = new Font("黑體",Font.CENTER_BASELINE,20);//設(shè)置圖片標(biāo)題的字體和大小
                TextTitle _title = new TextTitle(title);
                _title.setFont(font);
                chart.setTitle(_title);
                return super.SUCCESS;
             }  
             public JFreeChart getChart() {
                return chart;
             }
          }

          小結(jié):這只是一個(gè)簡(jiǎn)單的例子,如果你想深入了解的話,可以參考webwork文檔和jfreechart網(wǎng)站。
          參考資料:
          http://www.jfree.org/jfreechart/index.html
          webwork英文文檔

           

          posted on 2006-03-08 17:13 黑咖啡 閱讀(302) 評(píng)論(0)  編輯  收藏 所屬分類: tec

          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(2)

          隨筆分類(67)

          文章分類(43)

          Good Article

          Good Blogs

          Open Source

          最新隨筆

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 纳雍县| 大方县| 永德县| 江口县| 潍坊市| 从化市| 安阳县| 江陵县| 西昌市| 大英县| 南陵县| 涿鹿县| 安龙县| 海伦市| 江津市| 苏州市| 凤翔县| 金华市| 香格里拉县| 聊城市| 柳林县| 万年县| 射洪县| 澜沧| 营口市| 高密市| 渝北区| 泸定县| 阿拉尔市| 沈阳市| 阿拉善右旗| 安阳市| 漠河县| 白山市| 五原县| 兰坪| 筠连县| 江西省| 沁源县| 太谷县| 白朗县|