Struts2结合Jfreechart实现数据报表统计(一)

2014-11-24 07:14:44 · 作者: · 浏览: 4

最近在公司做了一个数据的报表统计,主要实现了数据的饼状图、柱状图、折线图展示,写了这篇博客和大家分享一下:

学习参考资料在我的博客里面:http://download.csdn.net/detail/harderxin/6804365,里面有学习jfreechart相关的jar文件和学习文档,大家可以下载下来进行查看,我这里下载的jfreechart版本是1.0.17,对于现在来说,应该算是最新版本了吧!

一、环境配置:

1、导入struts相关jar包,我这里使用的是struts2

2、导入struts与jfreechart结合的jar包,struts2-jfreechart-plugin-2.3.1.jar,这个jar包在struts里面可能就已经存在了,这是struts2在这方面最好了处理,因为我们的jfreechart就是针对于java语言做报表工作的,很强大哦!

3、导入jfreechart核心包,解压我的文件,在jfreechart/lib/目录下,jcommon-1.0.21.jar、jfreechart-1.0.17.jar

4、关于struts2的部署和配置在这里就不像大家描述了,大家可以在网上找相关资料进行学习,我这个项目中运用到了struts2和spring框架,要用到jfreechart,我们在设置struts中的package配置时应该继承jfreechart-default,而不是像以前那样继承struts-default,理由应该是我们要在struts2中使用jfreechart,就会用到struts2-jfreechart-pluginjar包,所以它里面除了封装自己的逻辑外,也继承了struts-default,所以我们需要继承jfreechart-default:

  
	
    
     
      
      600 
      400 
      
     
   

  


我给Action定义为QueryAction,因为我使用了spring,所以class="queryAction",如果大家只用到了struts2,那就得把action的全路径都写在里面了。这里type="chart",表示我们使用的是jfreechart输出,如果我们没有使用struts框架,只是使用基本的Servlet处理用户请求,那么我们需要在web.xml中进行相应的配置:

  
	
   
    DisplayChart
   
	
   
    org.jfree.chart.servlet.DisplayChart
   

  

  
	
   
    DisplayChart
   
	
   
    /DisplayChart
   

  

二、Action处理:

我们编写的Action中需定义一个JFreeChart对象,名称也必须为chart,可能是框架规定的,然后提供其相应的set和get方法:

public class QueryAction {
	
	private JFreeChart chart;
	
	public JFreeChart getChart() {
		return chart;
	}

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

我们在处理逻辑的时候只需要获得相应的JfreeChart对象即可:

	public String show() throws Exception {
		String type=request.getParameter("type");
		Map
  
    map=null;
		if(type!=null&&type.equals("area")){
			map=queryService.findRepairRecByArea();
			this.chart = JfreeChartUtil.createPieChart("各地区产品数量统计", map);//饼状图
		}else if(type!=null&&type.equals("person")){
			List
   
    > list=queryService.findRepairRec(PERSON); map=new HashMap
    
     (); for(Map
     
       repairRec:list){ String person=repairRec.get("repair_person")+""; Double count=Double.parseDouble(repairRec.get("count")+""); map.put(person, count); } this.chart = JfreeChartUtil.createBarChart("各人员维修产品数量统计", "维修人员", "产品数量", map);//柱状图 } //this.chart = JfreeChartUtil.createLineChart("折线图", "X轴标签", "Y轴标签"); return "show"; }
     
    
   
  


我在逻辑处理的时候,把相应的图的逻辑封装为JfreeChartUtil类,传入相应的参数过去,其中数据的显示则是从后台查询出来的,然后自己封装为一个Map :其中键值为描述标签信息,值为相应的数值,然后在设置的时候循环遍历Map取得其中的键和值。

三、jsp页面:

jsp页面中的代码就很简单了,直接一个img标签,然后src中写上访问的action名称即可:



jfreechart

我们在访问的时候直接访问这个jsp页面即可:http://localhost:8080/xroa/index.jsp,它会自动请求Action显示相应的报表;

四、逻辑处理,下面,让我们来看看我们的逻辑处理这一大块,说白了就是掌握里面的API,然后灵活调用就可以了,因为代码里面有注解,所以我就不多说了,大家可以看看代码,如果弄不懂,可以看我那个资源文件里面的中文文档,或者自己从网上进行查找,因为里面的类比较多,所以我就不一一把那些类写出来了,大家灵活运用就可以了!

1)创建饼状图:

\

实现代码:

	/**
	 * 创建饼状图
	 * @param title 标题
	 * @param map 键值对
	 * @return
	 */
	public static JFreeChart createPieChart(String title,Map
  
    map){
		DefaultPieDataset dpd=createPieDataset(map);
		// 创建PieChart对象(标题,数据集,是否显示图例,是否生成工具提示,是否生成URL链接)
		JFreeChart chart = ChartFactory.createPieChart3D(title, dpd,
				true, true, false);
		setPie3DStyle(chart);
		return chart;
	}

	/**
	 * 创建饼状图数据
	 * @param map
	 * @return
	 */
	private static DefaultPieDataset createPieDataset(Map
   
     map){ DefaultPieDataset dpd = new DefaultPieDataset(); Set
    
      set=map.keySet(); for(Iterator
     
       it