Struts2+JFreeChart-阿里云开发者社区

开发者社区> 开发与运维> 正文

Struts2+JFreeChart

简介:

前言
     关于Struts2入门以及提高等在这里就不介绍了,但是关于Struts2的学习有以下推荐:

    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入门等这里我也不打算介绍了,中文资料很多了。


 

正题
     下面以边帖图片和代码的方式来讲解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
<?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
struts.ui.theme=simple
        struts-jfreechart.xml 
<!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. 新建JFreeChartAction继承ActionSupport,生成JFreeChart对象并保存到chart中,注意这个名称是固定的。
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,truefalse);
        
        
return SUCCESS;
    }

    
public JFreeChart getChart() {
        
return chart;
    }

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


OK!至此代码已经全部贴完。
输入访问 http://localhost:8080/Struts2JFreeChart/jfreechart/JFreeChartAction.action
显示结果如下:




补充
    以上生成的图片是PNG格式的图片,如果需要自定义图片格式的话(好像只能支持JPG和PNG格式),那么自己写一个ChartResult继承自StrutsResultSupport,见代码:

 

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 imageType;
    
    
    @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(imageType) || "jpg".equalsIgnoreCase(imageType))
            ChartUtilities.writeChartAsJPEG(os, chart, width, height);
        
else if("png".equalsIgnoreCase(imageType))
            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 imageType) {
        
this.imageType = imageType;
    }

}

如此的话还需要小小的修改一下struts-jfreechart.xml:

<!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="imageType">jpg</param>
            
</result>
        
</action>
    
</package>
</struts>

OK!显示的效果是一样的,只是图片格式不一样,当然这里面你可以做更多操作!



转载:http://www.cnblogs.com/over140/archive/2007/11/25/971663.html

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章