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


 

正题
     下面以边帖图片和代码的方式来讲解Struts2与JFreeChart的整合。
     搭建环境:首先帖一张工程的目录结构以及所需的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,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
显示结果如下:



补充
    以上生成的图片是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

时间: 2024-11-15 20:45:22

Struts2+JFreeChart的相关文章

Struts2 自定义验证器

前言    其实早在四月底就在JR上发表了这篇文章,这次再次搬出来一是为了资料集中,二是做一些修改和更详细的描述.和以往一样入门和介绍就不说了,如何学习在上篇文章Struts2+JFreeChart上有介绍. 正题1.工程目录结构图:2.以下依次帖代码:    a).    web.xml <?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns=&qu

jsp-struts2+jfreechart为什么没有鼠标事件

问题描述 struts2+jfreechart为什么没有鼠标事件 <%@ page language="java" import="java.util.*" pageEncoding="GBK" contentType="text/html; charset=GBK"%> <%@ page import="org.jfree.chart.ChartFactory,org.jfree.chart.JF

Java Swing中出现乱码,怎么解决?

问题描述 /****/packagecom.struts2.jfreechart;importorg.jfree.chart.ChartFactory;importorg.jfree.chart.ChartFrame;importorg.jfree.chart.JFreeChart;importorg.jfree.data.general.DefaultPieDataset;/***@author谌纪超**/publicclassJFreeChartDemo{/***@paramargs*/pu

struts2工作流程及各种文件详解

转自:http://blog.csdn.net/zjtimef/article/details/12027767 当用户发送一个请求后,web.xml中配置的FilterDispatche(Struts 2核心控制器)就会过滤该请求,FilterDispatcher根据配置,将请求转发给Action. 以下是详解过程: 1. 当Web容器收到 请求(HttpServletRequest),例如http://localhost:8080/Struts 2.0/hello.jsp就是一个请求. 2.

在JSP页面使用JFreeChart如何实现点击跳转事件的效果?

问题描述 我现在在JSP页面使用JFreeChart成了饼图和柱状图,我想问问如何点击饼图或是柱状图能有链接效果跳转到相应处理事件中?急,望高手指教,如果有代码最好发个吧我的邮箱mcgradywindows98@163.com,先谢谢了.我的JFreeChart版本是1.0.13,jcommon版本是1.0.16 解决方案 解决方案二:高手大虾们快来吧解决方案三:人呢????????????解决方案四:何必用JFreeChart太麻烦了用JS插件解决方案五:就是想用JFreeChart解决方案六

jfreechart从Oracle数据库中取值错误,在线等

问题描述 严重:Servlet.service()forservletPieChartthrewexceptionjava.lang.NullPointerExceptionatcom.etcxm.shouwangzhe.jfreechart.PieChartServlet.createPieDataset(PieChartServlet.java:77)atcom.etcxm.shouwangzhe.jfreechart.PieChartServlet.doPost(PieChartServl

struts2.0-struts2在实际开发中的使用的多吗?

问题描述 struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? struts2在实际开发中的使用的多吗? 解决方案 老项目多,新项目用SpringMVC了 解决方案二: SpringMVC用得越来越多了.

struts2 下载文件

服务端action代码  public String downloadReport() {    try {    String path = new String(filePath.getBytes("ISO-8859-1"),"utf-8");//处理get请求传过来的中文参数乱码,filePath文件路径需要set方法接收页面参数   System.out.println(path);   //输入流(相对于浏览器是输入流,服务器是输出流)   inputSt

我想要一个关于struts2与jqgrid结合的小项目,可一直弄不出修改功能

问题描述 我想要一个关于struts2与jqgrid结合的小项目,可一直弄不出修改功能 我是参照这个 http://blog.csdn.net/gengv/article/details/5719053来写的 因为以前接触jqgrid不多,又是Java的新手,想求个大神帮我完善一下这个小项目,只需要实现增删改查就可以了,我按照这个连接的大神去写,但我弄不懂他的服务端的java代码怎么写的,我希望能有个大神帮我弄一下他服务器端的大概代码出来,再发一下到小弟的邮箱 lfming1991@sina.c