Struts2+JFreeChart

 

補充
    以上生成的圖片是PNG格式的圖片,若是須要自定義圖片格式的話(好像只能支持JPG和PNG格式),那麼本身寫一個ChartResult繼承自StrutsResultSupport,見代碼: java

 

package  com.tangjun.struts2.chartresult;

import  java.io.OutputStream;

import  javax.servlet.http.HttpServletResponse;

import  org.apache.struts2.ServletActionContext;
import  org.apache.struts2.dispatcher.StrutsResultSupport;
import  org.jfree.chart.ChartUtilities;
import  org.jfree.chart.JFreeChart;

import  com.opensymphony.xwork2.ActionInvocation;

public   class  ChartResult  extends  StrutsResultSupport {

    
/**
     * 
     
*/
    
private   static   final   long  serialVersionUID  =   4199494785336139337L ;
    
    
// 圖片寬度
     private   int  width;
    
// 圖片高度
     private   int  height;
    
// 圖片類型 jpg,png
     private  String p_w_picpathType;
    
    
    @Override
    
protected   void  doExecute(String arg0, ActionInvocation invocation)  throws  Exception {
        JFreeChart chart 
= (JFreeChart) invocation.getStack().findValue( " chart " );
        HttpServletResponse response 
=  ServletActionContext.getResponse();
        OutputStream os 
=  response.getOutputStream();
        
        
if ( " jpeg " .equalsIgnoreCase(p_w_picpathType)  ||   " jpg " .equalsIgnoreCase(p_w_picpathType))
            ChartUtilities.writeChartAsJPEG(os, chart, width, height);
        
else   if ( " png " .equalsIgnoreCase(p_w_picpathType))
            ChartUtilities.writeChartAsPNG(os, chart, width, height);
        
else
            ChartUtilities.writeChartAsJPEG(os, chart, width, height);
        
        os.flush();

    }
    
public   void  setHeight( int  height) {
        
this .height  =  height;
    }

    
public   void  setWidth( int  width) {
        
this .width  =  width;
    }
    
    
public   void  setImageType(String p_w_picpathType) {
        
this .p_w_picpathType  =  p_w_picpathType;
    }

}

如此的話還須要小小的修改一下struts-jfreechart.xml:web

<! DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

< struts >
    
< package  name ="jFreeChartDemonstration"  extends ="struts-default"
        namespace
="/jfreechart" >
        
<!--  自定義返回類型  -->
        
< result-types >
            
<!--  
            <result-type name="chart" class="org.apache.struts2.dispatcher.ChartResult"></result-type>
             
-->
            
< result-type  name ="chart"  class ="com.tangjun.struts2.chartresult.ChartResult" ></ result-type >
        
</ result-types >

        
< action  name ="JFreeChartAction"  class ="com.tangjun.struts2.JFreeChartAction" >
              
<!--
              <result type="chart"> 
                   <param name="width">400</param>
                   <param name="height">300</param>
            </result>
            
-->
              
< result  type ="chart" >  
                   
< param  name ="width" > 400 </ param >
                   
< param  name ="height" > 300 </ param >
                   
< param  name ="p_w_picpathType" > jpg </ param >
            
</ result >
        
</ action >
    
</ package >
</ struts >

OK!顯示的效果是同樣的,只是圖片格式不同,固然這裏面你能夠作更多操做!apache

前言
     關於Struts2入門以及提升等在這裏就不介紹了,可是關於Struts2的學習有如下推薦:app

    1. struts2-showcase-2.0.6.war:這個是官方自帶的Demo(struts-2.0.6-all.zip\struts-2.0.6\apps目錄下),很是全面,直接部署就能夠了(不少朋友Struts2能學很好我估計仍是直接從這裏學來的)。
    2. wiki-WebWork:入了門的朋友應該都知道,strust2由webwork2和struts1.x合併起來的,但主要仍是以webwork2爲主,因此若是找不到Struts2的資料能夠找WebWork資料看看。
    3. Max On Java的博客,他的博客的資料在中文的Struts2算是比較全的了,寫得很詳細。
    4. The Code ProjectGoogle - CodeSearchKoders:這幾個代碼搜索網站在我找不到中文資料甚至英文文章的時候幫了我大忙!

     關於JFreeChart入門等這裏我也不打算介紹了,中文資料不少了。

ide

 

 

正題
     下面以邊帖圖片和代碼的方式來說解Struts2JFreeChart的整合。
     搭建環境:首先帖一張工程的目錄結構以及所需的jar包。注意:若是你不打算本身寫ChartResult的話只須要引入struts2-jfreechart-plugin-2.0.6.jar(這個在struts-2.0.6-all.zip能夠找到了):
         
       1.依次帖web.xml、struts.xml、struts.properties和struts-jfreechart.xml幾個配置文件的代碼:
        web.xml
新建JFreeChartAction繼承ActionSupport,生成JFreeChart對象並保存到chart中,注意這個名稱是固定的。
 學習

<? xml version="1.0" encoding="UTF-8" ?>
< web-app  version ="2.4"  
    xmlns
="http://java.sun.com/xml/ns/j2ee"  
    xmlns:xsi
="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation
="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
>
    
    
< filter >
        
< filter-name > struts2 </ filter-name >
        
< filter-class >
            org.apache.struts2.dispatcher.FilterDispatcher
        
</ filter-class >
    
</ filter >
    
< filter-mapping >
        
< filter-name > struts2 </ filter-name >
        
< url-pattern > /* </ url-pattern >
    
</ filter-mapping >
</ web-app >

        struts.xml
 網站

<? xml version="1.0" encoding="UTF-8" ?>
<! DOCTYPE struts PUBLIC 
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>

< struts >
    
< include  file ="struts-jfreechart.xml"   />
</ struts >

        struts.properties
 ui

struts.ui.theme = simple

        struts-jfreechart.xml this

<! DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd"
>
< struts >
    
< package  name ="jFreeChartDemonstration"  extends ="struts-default"
        namespace
="/jfreechart" >
        
< result-types >
            
< result-type  name ="chart"  class ="org.apache.struts2.dispatcher.ChartResult" ></ result-type >
        
</ result-types >
        
< action  name ="JFreeChartAction"  class ="com.tangjun.struts2.JFreeChartAction" >
              
< result  type ="chart" >  
                   
< param  name ="width" > 400 </ param >
                   
< param  name ="height" > 300 </ param >
            
</ result >
        
</ action >
    
</ package >
</ struts >

        說明:這裏只須要說明下struts-jfreechart.xml,這裏直接調用已經寫好的類ChartResult,這個類是繼承自com.opensymphony.xwork2.Result,傳入生成圖片大小的參數width和height就能夠了。

       2.google

package  com.tangjun.struts2;

import  com.opensymphony.xwork2.ActionSupport;
import  org.jfree.chart.ChartFactory;
import  org.jfree.chart.JFreeChart;
import  org.jfree.data.general.DefaultPieDataset;

public   class  JFreeChartAction  extends  ActionSupport {

    
/**
     * 
     
*/
    
private   static   final   long  serialVersionUID  =   5752180822913527064L ;

    
// 供ChartResult調用->ActionInvocation.getStack().findValue("chart")
     private  JFreeChart chart;
    
    @Override
    
public  String execute()  throws  Exception {
        
// 設置數據
        DefaultPieDataset data  =   new  DefaultPieDataset();
        data.setValue(
" Java " new  Double( 43.2 ));
        data.setValue(
" Visual Basic " new  Double( 1.0 ));
        data.setValue(
" C/C++ " new  Double( 17.5 ));
        data.setValue(
" tangjun " new  Double( 60.0 ));
        
// 生成JFreeChart對象
        chart  =  ChartFactory.createPieChart( " Pie Chart " , data,  true , true false );
        
        
return  SUCCESS;
    }

    
public  JFreeChart getChart() {
        
return  chart;
    }

    
public   void  setChart(JFreeChart chart) {
        
this .chart  =  chart;
    }
}


OK!至此代碼已經所有貼完。
輸入訪問 http://localhost:8080/Struts2JFreeChart/jfreechart/JFreeChartAction.action 顯示結果以下:

相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息