JfreeChart 在Struts2 web上显示柱状图并当鼠标经过是出现提示信息
2012-11-22 22:23
627 查看
最近做了个项目,需要在Struts2 Web 上使用JFreeChart并且在JFreeChart的柱状图上显示提示信息,也就是经常所说的热点信息。
步骤如下 :
1.首先创建一个Struts2的项目。
2.修改web.xml文件,在文中增加一个servlet。
代码如下
<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>
这个DisplayChart类是 JFreeChart自带的,不需要我们去创建的。
整个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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>demo_JFreeChart</display-name>
<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>
<description></description>
<display-name>ApplicationServlet</display-name>
<servlet-name>ApplicationServlet</servlet-name>
<servlet-class>com.util.ApplicationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ApplicationServlet</servlet-name>
<url-pattern>/ApplicationServlet</url-pattern>
</servlet-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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.修改struts.xml文件,增加一个contant。代码如下:
<constant name="struts.action.extension" value="do,action"/> //注:这里是最重要的一句代码,绝对不能缺少,否则就不会出现提示信息。
整个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.action.extension" value="do,action"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<constant name="struts.ui.theme" value="simple" />
<package name="first" extends="struts-default" namespace="/">
<action name="chart" class="com.action.ChartAction" method="getChart">
<result >first.jsp</result>
</action>
</package>
</struts>
4.创建一个jsp页面:first.jsp
内容代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<P ALIGN="CENTER">
<s:property value="mapMessage" escape="false"/>
<img src="<s:property value='src'/>" border=0 usemap="#map0">
</P>
5.创建action: ChartAction 并继承ActionSupport
具体代码如下:
package com.action;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Polygon;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import com.opensymphony.xwork2.ActionSupport;
public class ChartAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
private Log log=LogFactory.getLog(ChartAction.class);
private HttpServletRequest request;
private HttpServletResponse response;
private String mapMessage;
private String src;
private String linemapMessage;
private String linesrc;
//创建图表的方法
public String getChart() throws IOException {
JFreeChart chart = ChartFactory.createBarChart(null, //图形标题名称
null, //domain轴 Lable,横坐标Lable
null, //range 轴 Lable,纵坐标Lable
defaultcategorydataset(), // dataset
PlotOrientation.VERTICAL, //垂直显示
true, // legend?
true, // tooltips?
false); //URLs?
//设置标题及标题字体
chart.setTitle(new TextTitle("图书销售统计图",new Font("黑体",Font.ITALIC,22)));
//建一个图例
LegendTitle legendTitle = chart.getLegend(0);
//设置图例字体
legendTitle.setItemFont(new Font("宋体",Font.BOLD,14));
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 block
e.printStackTrace();
}
mapMessage = ChartUtilities.getImageMap("map0", info);
src = request.getContextPath()+"/servletDisplayChart?filename=" + filename;
System.out.println("mapMessage : "+mapMessage );
return super.SUCCESS;
}
//生成数据集的方法
private DefaultCategoryDataset defaultcategorydataset(){
String series1 = "JAVA";
String series2 = ".NET";
String series3 = "C++";
String type1 = "2009-01-01";
String type2 = "2009-02-01";
String type3 = "2009-03-01";
String type4 = "2009-04-01";
String type5 = "2009-05-01";
String type6 = "2009-06-01";
String type7 = "2009-07-01";
String type8 = "2009-08-01";
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, type1);
defaultcategorydataset.addValue(2D, series1, type2);
defaultcategorydataset.addValue(3D, series1, type3);
defaultcategorydataset.addValue(5D, series1, type4);
defaultcategorydataset.addValue(5D, series1, type5);
defaultcategorydataset.addValue(7D, series1, type6);
defaultcategorydataset.addValue(7D, series1, type7);
defaultcategorydataset.addValue(8D, series1, type8);
defaultcategorydataset.addValue(12, series2, type1);
defaultcategorydataset.addValue(23, series2, type2);
defaultcategorydataset.addValue(33, series2, type3);
defaultcategorydataset.addValue(22, series2, type4);
defaultcategorydataset.addValue(12, series2, type5);
defaultcategorydataset.addValue(33, series2, type6);
defaultcategorydataset.addValue(65, series2, type7);
defaultcategorydataset.addValue(1.0D, series2, type8);
defaultcategorydataset.addValue(22, series3, type1);
defaultcategorydataset.addValue(43, series3, type2);
defaultcategorydataset.addValue(33, series3, type3);
defaultcategorydataset.addValue(26, series3, type4);
defaultcategorydataset.addValue(13, series3, type5);
defaultcategorydataset.addValue(23, series3, type6);
defaultcategorydataset.addValue(32, series3, type7);
defaultcategorydataset.addValue(14.0D, series3, type8);
return defaultcategorydataset;
}
//以及set和get方法
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;
}
}
经过以上编辑后,启动tomcat。
在IE地址中输入:http://localhost:8080/项目名称/chart.action
这样就会得到一个页面,并且页面上会一个柱状图,而且鼠标经过时会出提示信息。
效果图如下:
希望以上的描述能对各位朋友有所帮助。如有疑问请给我留言或者QQ联系:308225695
步骤如下 :
1.首先创建一个Struts2的项目。
2.修改web.xml文件,在文中增加一个servlet。
代码如下
<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>
这个DisplayChart类是 JFreeChart自带的,不需要我们去创建的。
整个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"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 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>demo_JFreeChart</display-name>
<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>
<description></description>
<display-name>ApplicationServlet</display-name>
<servlet-name>ApplicationServlet</servlet-name>
<servlet-class>com.util.ApplicationServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ApplicationServlet</servlet-name>
<url-pattern>/ApplicationServlet</url-pattern>
</servlet-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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
3.修改struts.xml文件,增加一个contant。代码如下:
<constant name="struts.action.extension" value="do,action"/> //注:这里是最重要的一句代码,绝对不能缺少,否则就不会出现提示信息。
整个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.action.extension" value="do,action"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="false" />
<constant name="struts.ognl.allowStaticMethodAccess" value="true" />
<constant name="struts.ui.theme" value="simple" />
<package name="first" extends="struts-default" namespace="/">
<action name="chart" class="com.action.ChartAction" method="getChart">
<result >first.jsp</result>
</action>
</package>
</struts>
4.创建一个jsp页面:first.jsp
内容代码如下:
<%@ page language="java" import="java.util.*" pageEncoding="GBK"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<P ALIGN="CENTER">
<s:property value="mapMessage" escape="false"/>
<img src="<s:property value='src'/>" border=0 usemap="#map0">
</P>
5.创建action: ChartAction 并继承ActionSupport
具体代码如下:
package com.action;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.GradientPaint;
import java.awt.Polygon;
import java.io.IOException;
import java.text.NumberFormat;
import java.util.Random;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.entity.StandardEntityCollection;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.renderer.category.LineAndShapeRenderer;
import org.jfree.chart.servlet.ServletUtilities;
import org.jfree.chart.title.LegendTitle;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
import org.jfree.data.general.DefaultPieDataset;
import com.opensymphony.xwork2.ActionSupport;
public class ChartAction extends ActionSupport implements ServletRequestAware,
ServletResponseAware {
private Log log=LogFactory.getLog(ChartAction.class);
private HttpServletRequest request;
private HttpServletResponse response;
private String mapMessage;
private String src;
private String linemapMessage;
private String linesrc;
//创建图表的方法
public String getChart() throws IOException {
JFreeChart chart = ChartFactory.createBarChart(null, //图形标题名称
null, //domain轴 Lable,横坐标Lable
null, //range 轴 Lable,纵坐标Lable
defaultcategorydataset(), // dataset
PlotOrientation.VERTICAL, //垂直显示
true, // legend?
true, // tooltips?
false); //URLs?
//设置标题及标题字体
chart.setTitle(new TextTitle("图书销售统计图",new Font("黑体",Font.ITALIC,22)));
//建一个图例
LegendTitle legendTitle = chart.getLegend(0);
//设置图例字体
legendTitle.setItemFont(new Font("宋体",Font.BOLD,14));
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 block
e.printStackTrace();
}
mapMessage = ChartUtilities.getImageMap("map0", info);
src = request.getContextPath()+"/servletDisplayChart?filename=" + filename;
System.out.println("mapMessage : "+mapMessage );
return super.SUCCESS;
}
//生成数据集的方法
private DefaultCategoryDataset defaultcategorydataset(){
String series1 = "JAVA";
String series2 = ".NET";
String series3 = "C++";
String type1 = "2009-01-01";
String type2 = "2009-02-01";
String type3 = "2009-03-01";
String type4 = "2009-04-01";
String type5 = "2009-05-01";
String type6 = "2009-06-01";
String type7 = "2009-07-01";
String type8 = "2009-08-01";
DefaultCategoryDataset defaultcategorydataset = new DefaultCategoryDataset();
defaultcategorydataset.addValue(1.0D, series1, type1);
defaultcategorydataset.addValue(2D, series1, type2);
defaultcategorydataset.addValue(3D, series1, type3);
defaultcategorydataset.addValue(5D, series1, type4);
defaultcategorydataset.addValue(5D, series1, type5);
defaultcategorydataset.addValue(7D, series1, type6);
defaultcategorydataset.addValue(7D, series1, type7);
defaultcategorydataset.addValue(8D, series1, type8);
defaultcategorydataset.addValue(12, series2, type1);
defaultcategorydataset.addValue(23, series2, type2);
defaultcategorydataset.addValue(33, series2, type3);
defaultcategorydataset.addValue(22, series2, type4);
defaultcategorydataset.addValue(12, series2, type5);
defaultcategorydataset.addValue(33, series2, type6);
defaultcategorydataset.addValue(65, series2, type7);
defaultcategorydataset.addValue(1.0D, series2, type8);
defaultcategorydataset.addValue(22, series3, type1);
defaultcategorydataset.addValue(43, series3, type2);
defaultcategorydataset.addValue(33, series3, type3);
defaultcategorydataset.addValue(26, series3, type4);
defaultcategorydataset.addValue(13, series3, type5);
defaultcategorydataset.addValue(23, series3, type6);
defaultcategorydataset.addValue(32, series3, type7);
defaultcategorydataset.addValue(14.0D, series3, type8);
return defaultcategorydataset;
}
//以及set和get方法
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;
}
}
经过以上编辑后,启动tomcat。
在IE地址中输入:http://localhost:8080/项目名称/chart.action
这样就会得到一个页面,并且页面上会一个柱状图,而且鼠标经过时会出提示信息。
效果图如下:
希望以上的描述能对各位朋友有所帮助。如有疑问请给我留言或者QQ联系:308225695
相关文章推荐
- 鼠标经过链接显示提示信息
- 10-鼠标经过表格显示提示信息(表格样式)
- datagrid 文本溢出时候 鼠标经过出现提示信息tooltip
- C#中怎样在Button控件上添加提示语,让鼠标经过按钮时显示提示信息!
- 鼠标经过文本内特定类型元素显示提示信息
- 鼠标经过datalist 中的图片显示提示信息列表
- 放鼠标出现的提示信息
- jquery实现鼠标移动出现提示信息(转自www.jqueryba.com)
- 鼠标经过文字显示提示层
- 当鼠标移到某一元素上时候显示提示信息,离开时提示信息也消失
- jQuery鼠标悬停显示提示信息窗口
- C# WinForm开发系列之chart控件画折线图和柱形图并自定义鼠标移动到数据标记点显示提示信息
- 跟随鼠标的移动,动态显示提示信息
- MFC/vc中当鼠标经过按钮等控件时出现文字提示功能
- jQuery地图热点效果-鼠标经过弹出提示层信息
- [原创] [WEB/JavaScript] 用JavaScript实现自定义控件 --- (1)显示提示信息的输入框
- D3添加title提示信息时出现滚动条时,显示错位的问题
- MFC/vc中当鼠标经过按钮等控件时出现文字提示功能
- VC/MFC 当鼠标移到控件上时显示提示信息
- 鼠标滑过图片,图片上出现一个遮罩层并显示图片的提示文字