SSH框架通过JFreeChart实现柱状图

一.直接生成的图片输出到jsp页面

1.jsp页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="<%=basePath%>">
<title>Insert title here</title>
</head>
<body>
 <!--img src='D:\temp\chart.jpg' width="680" height="700" onload="alert('图片存在');"  onerror="alert('无此图片');"/-->
 <img alt="统计图" src="<%=basePath%>/chart2.action">
</body>
</html>

2.action类

	public String execute() throws Exception{
	 //添加数据
			DefaultCategoryDataset dataset = new DefaultCategoryDataset();
			dataset.addValue(42000, "月份" , "1月");
			dataset.addValue(40000 , "月份" , "2月");
			dataset.addValue(34000 , "月份" , "3月");
			dataset.addValue(18000 , "月份" , "4月");
			dataset.addValue(26000 , "月份" , "5月");
			dataset.addValue(42000 , "月份" , "6月");
			dataset.addValue(40000 , "月份" , "7月");
			dataset.addValue(34000 , "月份" , "8月");
			dataset.addValue(18000 , "月份" , "9月");
			dataset.addValue(26000 , "月份" , "10月");
			dataset.addValue(45000 , "月份" , "11月");
			dataset.addValue(38000 , "月份" , "12月");

			//创建一个柱状图
			JFreeChart chart = ChartFactory.createBarChart3D("年度人口统计图", "人口", "数量",dataset,PlotOrientation.VERTICAL, true, false, false);
			chart.setTitle(new TextTitle("年度人口统计图", new Font("黑体", Font.ITALIC,22)));
			LegendTitle legend = chart.getLegend(0);
			legend.setItemFont(new Font("宋体", Font.BOLD, 14));
			CategoryPlot plot = (CategoryPlot) chart.getPlot();
			CategoryAxis categoryAxis = plot.getDomainAxis();
			categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));
			categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
			categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 18));
			NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();
			numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));

			HttpServletResponse response=ServletActionContext.getResponse();
			response.setContentType("image/");
			ChartUtilities.writeChartAsJPEG(response.getOutputStream(), 1, chart, 900, 600, null);
			response.getOutputStream().close();

			return null;
	}
	

3.struts.xml配置

      <action name="chart2" class="Char2tAction">
      <result name="success">/Chart.jsp</result>
      </action>

4.效果图

二.生成图片保存到本地:

1.生成图片

	public void createChart() {
		// TODO Auto-generated method stub
		DefaultCategoryDataset dataset = new DefaultCategoryDataset();
		dataset.addValue(1001, "1", "A");
		dataset.addValue(800, "2", "A");
		dataset.addValue(150, "3", "A");
		dataset.addValue(150, "1", "B");
		dataset.addValue(150, "2", "B");
		dataset.addValue(250, "3", "B");
		dataset.addValue(150, "1", "C");
		dataset.addValue(33, "2", "C");
		dataset.addValue(900, "3", "C");
//		JFreeChart chart = ChartFactory.createBarChart3D(
//											"", // 图表标题
//											"", // 目录轴的显示标签
//											"产量", // 数值轴的显示标签
//											dataset, // 数据集
//											PlotOrientation.VERTICAL , // 图表方向:垂直
//											true, // 是否显示图例(对于简单的柱状图必须是false)
//											false, // 是否生成工具
//											false // 是否生成URL链接
//									);
		//JFreeChart chart = ChartFactory.createBarChart3D("","","产量",dataset,PlotOrientation.VERTICAL,true,false,false);
		JFreeChart chart = ChartFactory.createBarChart3D("销量统计图", "种类", "产量", dataset, PlotOrientation.VERTICAL, true, false, false);

		//重新设置图标标题,改变字体
		chart.setTitle(new TextTitle("销量统计图", new Font("黑体", Font.ITALIC , 22)));
				//取得统计图标的第一个图例
				LegendTitle legend = chart.getLegend(0);
				//修改图例的字体
		        legend.setItemFont(new Font("宋体", Font.BOLD, 14));
				//legend.setItemFont(new Font("宋体", Font.TRUETYPE_FONT, 14));
				CategoryPlot plot = (CategoryPlot)chart.getPlot(); 

				chart.setBackgroundPaint(ChartColor.WHITE); 

				//设置柱状图到图片上端的距离
				ValueAxis rangeAxis = plot.getRangeAxis();
				rangeAxis.setUpperMargin(0.5);

				//取得横轴
				CategoryAxis categoryAxis = plot.getDomainAxis();
				//设置横轴显示标签的字体
				categoryAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22));
				//分类标签以45度角倾斜
//				categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);
				categoryAxis.setTickLabelFont(new Font("宋体" , Font.BOLD , 18)); 

				//取得纵轴
				NumberAxis numberAxis = (NumberAxis)plot.getRangeAxis();
				//设置纵轴显示标签的字体
				numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 22)); 

				//在柱体的上面显示数据
				BarRenderer custombarrenderer3d = new BarRenderer();
				custombarrenderer3d.setBaseItemLabelPaint(Color.BLACK);//数据字体的颜色
				custombarrenderer3d.setBaseItemLabelGenerator(new StandardCategoryItemLabelGenerator());
				custombarrenderer3d.setBaseItemLabelsVisible(true);
				plot.setRenderer(custombarrenderer3d);
                //HttpServletRequest request = null;
				//request.getSession().getServletContext().getRealPath("/");
				//URL a = Thread.currentThread().getContextClassLoader().getResource("");
                //URL a = Thread.currentThread().getContextClassLoader().getResource("");
                //System.out.println(a);
				FileOutputStream fos = null;
				//String imagePath = "D:\\chart.jpg";
				String imagePath = "D:\\temp\\chart.jpg";
				ChartRenderingInfo info = new ChartRenderingInfo();
				try {
					fos = new FileOutputStream(imagePath);
					//将统计图标输出成JPG文件
					ChartUtilities.writeChartAsJPEG(
						fos, //输出到哪个输出流
						1, //JPEG图片的质量,0~1之间
						chart, //统计图标对象
						800, //宽
						600,//高
						info //ChartRenderingInfo 信息
					);
					fos.close();
				} catch (FileNotFoundException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} catch (IOException e) {
					// TODO Auto-generated catch block

					e.printStackTrace();
				}

	}

2.显示到jsp:

		try{

			String impath = "D:\\temp\\chart.jpg";//此处的图路径,是上面所示代码中生成柱状图的存储路径
			File file = new File(impath);

			InputStream inputStream = null;
			if(file.exists()){
				try {
					inputStream = new FileInputStream(file);

				} catch (FileNotFoundException e) {

				}
			}

			int i = inputStream.available();
		         byte data[] = new byte[i];
		         inputStream.read(data);

		         HttpServletResponse response = ServletActionContext.getResponse();
		         ServletOutputStream out = response.getOutputStream();

		         response.setContentType("image/jpeg");

		         out.write(data);
		         out.flush();
		         out.close(); 

		}catch(IOException e){
		         e.printStackTrace();
		}
时间: 2024-08-25 03:22:14

SSH框架通过JFreeChart实现柱状图的相关文章

javaEE SSH框架使用ChartDirector绘图

最近做毕设想要在web端显示图表,网上有很多图表的插件,JFreeChart也不错,不过我选择的是ChartDirector. 一.需求:分页显示学生访问对应课程次数的柱状图,(之前我爬取了网站上的一些课程,并记录了用户访问的记录) 二.实现: (1)ChartDirector自带一个jsp文件,复制到项目中,还有将ChartDirector.jar包引入项目中 (2)要显示图表的jsp界面,其中chart1URL和imageMap1是Action层处理好传递过来的数据,分页的代码可以忽略掉,其

MVC+Spring.NET+NHibernate .NET SSH框架整合

在JAVA中,SSH框架可谓是无人不晓,就和.NET中的MVC框架一样普及.作为一个初学者,可以感受到.NET出了MVC框架以后太灵活了(相比之前的web Form),嗯,关于.NET中的MVC框架我就不多说了,推荐这位大神的<MVC知多少系列>http://www.cnblogs.com/sheng-jie/p/6291915.html.下面进入正题,.NET中也有SSH框架,他们分别指MVC+Spring.NET和NHibernate. 其中Spring.NET是典型的IOC框架,类似的还

学习SSH框架

1.SSH框架的认知 在做相关的java的网页的开发制作时,良好的层次分解是十分有比要的,所以我们在云涌第三方的框架之下来简化还有名了我们相关的网站的开发. SSH框架实则为Struct + spring + hibernate 的三个组成的,其中struct,专注与前台的相关的请求的所对应的ActionForm还有其相关跳转的Action来 处理得到相关的JSP页面,从而来更新或是条状到相关用户的请求的服务页面,或是信息页面.而Hibernate的作用是体现在数据的持久化的层次中,我们对于页

SSH框架 jar包版本的选择

我搭建SSH框架,想选择最新的jar,但是由于jar版本的问题 报出各种各样的千奇百怪的问题.从网上找了一些,但都是用比较老的版本.在我的不懈努力,最后终于成功了.再次分享一下,由于才疏学浅,见识浅薄,仅供大家参考! hibernate框架的选择,取决于spring的支持.在spring-orm-XX.jar 文件中有对hibernate的支持情况,像这个spring-orm-4.1.6.RELEASE.jar支持hibernate3,hibernate4,不支持hibernate5.所以我只能

基于SSH框架的学生公寓管理系统的质量属性

系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信息记录:包括宿舍楼号.宿舍号.电费信息.维修记录:3)报修信息记录:包括宿舍楼号.宿舍号.报修品.时间.维修状态:4)后勤人员记录:包括工号.姓名.联系方式:5)电费信息记录:包括宿舍楼号.宿舍号.电剩余量.使用量.缴费金额.剩余金额:6)学生晚归记录:晚归学生的学号.姓名.时间.宿舍号.日期.和原

SSH框架总结(框架分析+环境搭建+实例源代码下载)

首先,SSH不是一个框架,而是多个框架(struts+spring+hibernate)的集成,是眼下较流行的一种Web应用程序开源集成框架,用于构建灵活.易于扩展的多层Web应用程序. 集成SSH框架的系统从职责上分为四层:表示层.业务逻辑层.数据持久层和域模块层(实体层). Struts作为系统的总体基础架构,负责MVC的分离,在Struts框架的模型部分,控制业务跳转,利用Hibernate框架对持久层提供支持.Spring一方面作为一个轻量级的IoC容器,负责查找.定位.创建和管理对象及

SSH框架搭建

闲来无事,来搞下SSH框架的搭建吧. 1.struts搭建 这个不用说了吧,新建一个web项目,把struts-2.3.7-all解压后的struts2-blank里面的lib下面的包全部复制到你新建的web项目里面,把web-inf下面的web.xml复制过去,把src目录下的struts.xml复制到新建的src目录下.最重要的是你要集成spring,那么问题来了,你少包了,亲.去struts-2.3.7-all文件夹的lib目录下把struts2-spring-plugin-2.3.7包拷

java教程(五)SSH框架-配置

前言:从这篇博客开始我将继续讲述Java教程:SSH篇,主要内容围绕SSH框架分析与搭建,今天先简单介绍一下SSH的配置. SSH配置顺序是: spring-->hibernate-->struts 1. 建立web-project ,并添加Spring支持,添加JAR包时注意,aop  core web commons等包要加载,然后一直下一步就可以成功添加spring支持: 2. 添加hibernate支持,同样注意包的选择, 下一步中注意,选择添加到spring中(spring conf

SSH框架--struts深入详解(一)

学习了struts,但是对于它的由来,以及为什么使用action和struts.xml的方式而不采用以前的servlet方式,有些疑问,到底之前的方式有什么弊端,struts又给我们带来了什么便利? 下面一一为大家解答! struts的由来: 随着JSP与Servlet 技术大量应用于以Web为基础的应用程序,为了提升Web 应用程序可维护性与重复使用性,Java开发人员提出了一些较佳的开发模式.比较常见的两种JSP应用架构分别为Model1 与Model 2.详情参见(JAVA学习篇--JAV