Jfreechart + struts2 实现数据下探 Demo
来源:互联网 发布:淘宝怎么搜高仿衣服 编辑:程序博客网 时间:2024/05/21 17:06
Jfreechart + struts2 实现数据下探
研究了好多天。网上的教程都是缺斤短两。自己又是个新手搞了好久。终于今天解决了。贴下源码做个笔记:
1、目录结构:
红框内是源码位置。
2、jar包。有一些是没用的。为了方便我都导入了
3、web.xml配置
<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://java.sun.com/xml/ns/javaee"xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"id="WebApp_ID" version="2.5"><!-- <display-name>CrmJfreechart</display-name> --><!-- struts2过滤器 --><filter><filter-name>struts2</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><filter-mapping><filter-name>struts2</filter-name><url-pattern>/*</url-pattern></filter-mapping><servlet><servlet-name>DisplayChart</servlet-name><servlet-class>org.jfree.chart.servlet.DisplayChart</servlet-class></servlet><servlet-mapping><servlet-name>DisplayChart</servlet-name><url-pattern>/servletDisplayChart</url-pattern></servlet-mapping></web-app>
4、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><constant name="struts.enable.DynamicMethodInvocation" value="true" /> <constant name="struts.devMode" value="true" /><constant name="struts.action.extension" value="do,action"/> <package name="first" extends="jfreechart-default" namespace="/"> <action name="chart" class="com.web.action.ChartAction" method="getChart"> <result name="first">/first.jsp</result> </action> </package> <package name="b" namespace="/" extends="jfreechart-default"> <action name="bchart" class="com.web.action.ChartActionB"> <result type="chart"> <param name="width">700</param> <param name="height">400</param> </result> </action> </package> </struts>
5、重要的action源码
ChartAction.java 第一个显示的。
package com.web.action;import java.awt.Color;import java.awt.Font;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.struts2.interceptor.ServletRequestAware;import org.apache.struts2.interceptor.ServletResponseAware;import org.jfree.chart.ChartFactory;import org.jfree.chart.ChartRenderingInfo;import org.jfree.chart.ChartUtilities;import org.jfree.chart.JFreeChart;import org.jfree.chart.entity.StandardEntityCollection;import org.jfree.chart.labels.StandardPieToolTipGenerator;import org.jfree.chart.plot.PiePlot;import org.jfree.chart.servlet.ServletUtilities;import org.jfree.chart.title.LegendTitle;import org.jfree.chart.title.TextTitle;import org.jfree.chart.urls.StandardPieURLGenerator;import org.jfree.data.general.DefaultPieDataset;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ChartAction extends ActionSupport implements ServletRequestAware,ServletResponseAware {private HttpServletRequest request;private HttpServletResponse response;private String mapMessage;private String src;public String getChart() throws IOException {// 生成饼图JFreeChart chart = ChartFactory.createPieChart("图书销售统计表", // 图表标题getDateSet(), // 数据true, // 是否显示图例true, // 是否显示工具提示true // 是否生成URL);// 设置标题及标题字体chart.setTitle(new TextTitle("图书销售统计图", new Font("黑体", Font.ITALIC, 22)));// 建一个图例LegendTitle legendTitle = chart.getLegend(0);// 设置图例字体legendTitle.setItemFont(new Font("宋体", Font.BOLD, 14));// 获取饼图plot对象PiePlot plot = (PiePlot) chart.getPlot();// 根据key指定各个数据饼图的颜色plot.setSectionPaint("JAVA教程", Color.RED);plot.setSectionPaint("c++教程", Color.BLUE);plot.setSectionPaint("C#教程", Color.GREEN);plot.setSectionPaint("VC++教程", Color.ORANGE);// 设置plot字体plot.setLabelFont(new Font("宋体", Font.BOLD, 18));// 设置背景透明度(0~1)plot.setBackgroundAlpha(0.9f);// -------------------热点设置分割线----------------------------// 设定链接plot.setNoDataMessage("No data available");String str = request.getContextPath() + "/bchart.action";// StandardPieURLGenerator()不设置第二个参数"type"默认为categoryplot.setURLGenerator(new StandardPieURLGenerator(str, "type"));plot.setToolTipGenerator(new StandardPieToolTipGenerator());StandardEntityCollection sec = new StandardEntityCollection();// 生成RenderingInfo实例,info参数就是图片的热点信息ChartRenderingInfo info = new ChartRenderingInfo(sec);response.setCharacterEncoding("GBK");String filename = null;try {filename = ServletUtilities.saveChartAsJPEG(chart, 700, 500, info,request.getSession());} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();}mapMessage = ChartUtilities.getImageMap("map0", info);src = request.getContextPath() + "/servletDisplayChart?filename="+ filename;return "first";}private static DefaultPieDataset getDateSet() {// 提供生成饼图的数据DefaultPieDataset dataset = new DefaultPieDataset();dataset.setValue("JAVA教程", 47);dataset.setValue("c++教程", 23);dataset.setValue("C#教程", 20);dataset.setValue("VC++教程", 10);return dataset;}public void setServletRequest(HttpServletRequest request) {this.request = request;}public void setServletResponse(HttpServletResponse response) {this.response = response;}public String getMapMessage() {return mapMessage;}public void setMapMessage(String mapMessage) {this.mapMessage = mapMessage;}public String getSrc() {return src;}public void setSrc(String src) {this.src = src;}}
ChartActionB.java 跳转到的Action
package com.web.action;import java.awt.Color;import java.awt.Font;import java.io.IOException;import javax.servlet.http.HttpServletRequest;import org.apache.struts2.interceptor.ServletRequestAware;import org.jfree.chart.ChartFactory;import org.jfree.chart.JFreeChart;import org.jfree.chart.axis.CategoryAxis;import org.jfree.chart.axis.NumberAxis;import org.jfree.chart.plot.CategoryPlot;import org.jfree.chart.plot.PlotOrientation;import org.jfree.chart.title.TextTitle;import org.jfree.data.category.CategoryDataset;import org.jfree.data.category.DefaultCategoryDataset;import com.opensymphony.xwork2.ActionSupport;@SuppressWarnings("serial")public class ChartActionB extends ActionSupport implements ServletRequestAware {private HttpServletRequest request;public JFreeChart getChart() throws IOException {// ---------------------逻辑判断分割线-------------------------------CategoryDataset dataset;String queryString = request.getQueryString();queryString = java.net.URLDecoder.decode(queryString, "UTF-8");System.out.println(queryString);String type = null;for (String param : queryString.split("&")) {String[] nameValue = param.split("=");type = nameValue[0].equals("type") ? nameValue[1] : type;}String subTitle = "";if (type.equals("JAVA教程")) {dataset = getDateSet1();subTitle = "JAVA教程";} else if (type.equals("c++教程")) {dataset = getDateSet4();subTitle = "c++教程";} else if (type.equals("C#教程")) {dataset = getDateSet2();subTitle = "C#教程";} else {dataset = getDateSet3();subTitle = "VC++教程";}// String title = subTitle + "图书的销售情况";// -------------------------生成图片分割线---------------------// 生成柱状图JFreeChart chart = ChartFactory.createBarChart("图书销售统计表", // 图表标题"月份", // 目录轴的显示标签"销量", // 数值轴的显示标签dataset, // 数据// PlotOrientation.HORIZONTAL, //图表方向水平PlotOrientation.VERTICAL, // 图表方向垂直false, // 是否显示图例false, // 是否显示工具提示false // 是否生成URL);// 设置标题及标题字体chart.setTitle(new TextTitle("<<" + subTitle + ">>销售统计图", new Font("黑体", Font.ITALIC, 22)));// 建一个图例// LegendTitle legendTitle = chart.getLegend(0);// 设置图例字体// legendTitle.setItemFont(new Font("宋体",Font.BOLD,14));// 获取柱状图plot对象CategoryPlot plot = (CategoryPlot) chart.getPlot();// 设置柱型的颜色plot.getRenderer().setSeriesPaint(0, Color.blue);// 取得横轴CategoryAxis categoryAxis = plot.getDomainAxis();// 设置横轴的字体categoryAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));// 设置分类标签以45度倾斜// categoryAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45);// 设置分类标签字体categoryAxis.setTickLabelFont(new Font("宋体", Font.BOLD, 22));// 取得纵轴NumberAxis numberAxis = (NumberAxis) plot.getRangeAxis();// 设置纵轴的字体numberAxis.setLabelFont(new Font("宋体", Font.BOLD, 22));// 设置背景透明度(0~1)plot.setBackgroundAlpha(0.9f);return chart;}// ------------------------提供数据分割线--------------------private static DefaultCategoryDataset getDateSet4() {System.out.println("c++");// 提供生成柱形图的数据DefaultCategoryDataset dataset = new DefaultCategoryDataset();dataset.addValue(47, "c++教程", "06年10月");dataset.addValue(60, "c++教程", "06年11月");dataset.addValue(20, "c++教程", "06年12月");dataset.addValue(50, "c++教程", "07年1月");return dataset;}private static DefaultCategoryDataset getDateSet1() {System.out.println("java");// 提供生成柱形图的数据DefaultCategoryDataset dataset1 = new DefaultCategoryDataset();dataset1.addValue(47, "JAVA教程", "06年10月");dataset1.addValue(23, "JAVA教程", "06年11月");dataset1.addValue(20, "JAVA教程", "06年12月");dataset1.addValue(10, "JAVA教程", "07年1月");return dataset1;}private static DefaultCategoryDataset getDateSet2() {System.out.println("C#");// 提供生成柱形图的数据DefaultCategoryDataset dataset2 = new DefaultCategoryDataset();dataset2.addValue(27, "C#教程", "06年10月");dataset2.addValue(23, "C#教程", "06年11月");dataset2.addValue(40, "C#教程", "06年12月");dataset2.addValue(70, "C#教程", "07年1月");return dataset2;}private static DefaultCategoryDataset getDateSet3() {System.out.println("VC++");// 提供生成柱形图的数据DefaultCategoryDataset dataset3 = new DefaultCategoryDataset();dataset3.addValue(48, "VC++教程", "06年10月");dataset3.addValue(63, "VC++教程", "06年11月");dataset3.addValue(29, "VC++教程", "06年12月");dataset3.addValue(49, "VC++教程", "07年1月");return dataset3;}public void setServletRequest(HttpServletRequest request) {this.request = request;}}
6、JSP页面的源码
<%@ page language="java" contentType="text/html; charset=GBK"pageEncoding="GBK" %> <%@ taglib prefix="s" uri="/struts-tags"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><title>Insert title here</title></head><body><P ALIGN="CENTER"><s:property value="mapMessage" escape="false" /><img src="<s:property value='src'/>" border=0 usemap="#map0"></P></body></html>
实现效果展示:
点击java教程进入 下层数据
好多天终于出来了。瞬间有种解脱的感觉。这是刚进公司的第一个任务。做了好久。总算有收获。
对于有些时候图片出现乱码的时候。一定要统一几个地方的编码
项目编码、jsp页面编码、后台action编码、浏览器编码都需要一致。
由于本人只是菜鸟刚入行,有不妥之处,还望各位大神不吝指出。
0 0
- Jfreechart + struts2 实现数据下探 Demo
- Struts2结合Jfreechart实现数据报表统计
- Struts2结合Jfreechart实现数据报表统计
- Struts2下的JFreeChart应用
- struts2零配置下的JFreeChart
- struts2+JfreeChart实现饼状图,柱状图,线形图
- JFreeChart在Struts2中实现柱状图统计
- JFreeChart在Struts2中实现饼状图统计
- jfreechart struts2
- Struts2+JFreeChart
- Struts2+JFreeChart
- Struts2实现登陆功能Demo
- java利用JFreeChart实现各种数据统计图
- JFreeChart生成柱状图及其在struts2下的展现
- JFreeChart Demo窗体示例
- JFreeChart简单demo
- JFreeChart在Struts2中实现3D柱状图统计
- JFreeChart在Struts2中实现3D饼状图统计
- CocoaPods安装和使用教程
- 怎样在VMware虚拟机中使用安装并设置Ubuntu10.04系统
- ICE介绍 (RFC 5245)
- 第八次作业--JSTL
- Java回调函数的理解
- Jfreechart + struts2 实现数据下探 Demo
- linux ls -l 列表信息解释
- 使用CocoaPods来做iOS程序的包依赖管理
- PCI规范学习笔记,转载的
- 第3周作业-循环与判断语句
- 原生sql_query写入“\r\n”会保存为回车到数据库中
- A. Valera and X
- 面试题:接口和抽象类的区别
- ORACLE 创建视图时,提示用户权限不足