您的位置:首页 > 编程语言 > Java开发

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

 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: