JFreechart Struts2 报表整合

 下面以边帖图片和代码的方式来讲解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!显示的效果是一样的,只是图片格式不一样,当然这里面你可以做更多操作!

你可能感兴趣的:(struts2,jfreechart)