struts中调用servlet动态生成柱状图到jsp页面

原创 2011年11月02日 17:02:40

首先要用到 JFreeChart.jar、jcommon-1.0.15.jar、log4j.jar

servlet代码:

package com.framework.test;
import   javax.servlet.*;
import   javax.servlet.http.*;

import java.awt.Color;
import java.awt.Font;
import   java.io.*;
import java.text.DecimalFormat;
import   java.util.*;
import   org.jfree.data.category.*;
import   org.jfree.chart.*;
import   org.jfree.data.*;
import org.jfree.chart.axis.NumberAxis;
import org.jfree.chart.labels.StandardCategoryItemLabelGenerator;
import   org.jfree.chart.plot.*;

import com.framework.AppSession;
public class Test extends HttpServlet{
 private   static   final   String   CONTENT_TYPE   =   "text/html;charset=utf-8";
    public   void   init()   throws   ServletException   {
   
    }
 //Process   the   HTTP   Get   request
    public   void   doGet(HttpServletRequest   request,HttpServletResponse response)   throws
                    ServletException,   IOException   {
            response.setContentType( "image/jpeg ");
            response.setCharacterEncoding("utf-8");
            response.reset();
            CategoryDataset   data=(CategoryDataset) request.getSession().getAttribute("catedataset");//从session中取到CategoryDataset  对象
            //CategoryDataset   data=getDataSet2();
            JFreeChart   chart=ChartFactory.createBarChart( "", "", "点击率",data,PlotOrientation.VERTICAL,true,true,true);
            //设置图表的纵轴和横轴org.jfree.chart.axis.CategoryAxis
           org.jfree.chart.axis.CategoryAxis domainAxis = chart.getCategoryPlot().getDomainAxis();
           domainAxis.setLowerMargin(0.1);//设置距离图片左端距离此时为10%
           domainAxis.setUpperMargin(0.1);//设置距离图片右端距离此时为百分之10
           domainAxis.setCategoryLabelPositionOffset(10);//图表横轴与标签的距离(10像素)
           domainAxis.setCategoryMargin(0.2);//横轴标签之间的距离20%
         //取得纵轴
           NumberAxis numberAxis = (NumberAxis)chart.getCategoryPlot().getRangeAxis();
           //设置纵轴显示标签的字体
           numberAxis.setLabelFont(new Font("宋体" , Font.BOLD , 18));
           //设置最高的一个柱与图片顶端的距离
           numberAxis.setUpperMargin(0.1);
           //numberAxis.setFixedAutoRange(100);
           //设置整数显示
           //numberAxis.setStandardTickUnits(NumberAxis.createIntegerTickUnits());
           //numberAxis.setNegativeArrowVisible(true);
         
           //取最大数Math.max(supportCount, blackballCount)

           int totalcount= (Integer) request.getSession().getAttribute("totalcount");
           numberAxis.setUpperBound(totalcount);//动态设置纵坐标高度
           numberAxis.setLowerBound(0.01);
           //设置百分比显示
          // numberAxis.setNumberFormatOverride(new DecimalFormat("0%"));
           //numberAxis.setNumberFormatOverride(new DecimalFormat("0.00%"));
           //设置最小显示数,小于的话会显示在中间(正负)
           //numberAxis.setAutoRangeMinimumSize(1);

            Font font=new Font("宋体" , Font.BOLD , 12);
           String tit=(String) request.getSession().getAttribute("title");
           TextTitle title = new TextTitle(tit, font);//动态设置主标题
           chart.setTitle(title);
           //设定柱子的属性
           org.jfree.chart.axis.ValueAxis rangeAxis = chart.getCategoryPlot().getRangeAxis();
           rangeAxis.setUpperMargin(0.1);//设置最高的一个柱与图片顶端的距离(最高柱的10%)
            org.jfree.chart.renderer.category.BarRenderer3D renderer;
            renderer = new org.jfree.chart.renderer.category.BarRenderer3D();
            renderer.setItemMargin(0.4);//组内柱子间隔为组宽的10%
            //显示每个柱的数值,并修改该数值的字体属性
         renderer.setItemLabelGenerator(new StandardCategoryItemLabelGenerator());
         renderer.setItemLabelFont(new Font("黑体",Font.BOLD,10));//12号黑体加粗
         renderer.setItemLabelPaint(Color.black);//字体为黑色
         renderer.setItemLabelsVisible(true);
            chart.getCategoryPlot().setRenderer(renderer);

             chart.getLegend().setItemFont(new Font("宋体",Font.BOLD,12));//设置图下面框内中文字体不为乱码
            ChartUtilities.writeChartAsJPEG(response.getOutputStream(),1,chart,400,300,null);
    }
    public   void   doPost(HttpServletRequest   request,   HttpServletResponse   response)   throws
                    ServletException,   IOException   {
            doGet(request,   response);
    }
    private   static   CategoryDataset   getDataSet2()   {
         DefaultCategoryDataset   dataset   =   new DefaultCategoryDataset();
         dataset.addValue(0.25,   "beijing",   "test");
         dataset.addValue(0.5,   "shanghai",   "test");
         dataset.addValue(0.8,   "guangzhou",   "test");
         dataset.addValue(0.1,   "shanxi",   "test");
        return   dataset;
   }
    public   void   destroy()   {
    }
}

Action代码:

DefaultCategoryDataset  catedataset   =   new DefaultCategoryDataset();

catedataset.addValue();//动态添加,参考Test中getDataSet2()  

AppContext.getServletRequest().getSession(). setProperty("catedataset",catedataset);

AppContext.getServletRequest().getSession(). setProperty("totalcount", totalcount);

 AppContext.getServletRequest().getSession(). setProperty("title", investigate.getTitle());

jsp页面代码:

<img src="${pageContext.request.contextPath}/s/draw.htm" alt="" />

web.xml中配置:

<servlet>
    <servlet-name>draw</servlet-name>
    <servlet-class>com.framework.test.Test</servlet-class>
   </servlet>
   <servlet-mapping>
    <servlet-name>draw</servlet-name>
    <url-pattern>/s/draw.htm</url-pattern>
   </servlet-mapping>

——————————————————————————————————————————————

其实可以不用这个,完全可以根据生成的数据在jsp页面动态控制一张图片的高度或宽度来显示比例

版权声明:本文为博主原创文章,未经博主允许不得转载。

D3.js添加了过渡效果的柱形图

通过过渡效果 使柱形和文字渐渐升到应该到的位置 并弹几次 动态柱形图 .axis path, .axis line{ fill:none; stroke:black; sha...
  • u011699990
  • u011699990
  • 2016年10月15日 01:29
  • 1338

php生成柱状图

php生成柱状图      设计思路 1.还是要首先确定纵轴的刻度值,确定纵轴的刻度最大值 2.然后根据得到的数据个数确定图像的宽度,这时就可以创建图像了 3.计算每个色柱的高度,用高度可以计算出...
  • kkyi96
  • kkyi96
  • 2013年07月30日 14:07
  • 858

JFreeChart在Struts2中实现柱状图统计

在Struts2中,用JFreeChart实现柱状图统计 前段时间学习了一下JFreeChart,现在来整理一下自己所作的实例。 下面分别用两种方式来实现: 一种是以java应用程序的方式,一种是...
  • wangcunhuazi
  • wangcunhuazi
  • 2014年11月07日 22:48
  • 1446

用amcharts动态生成柱状图

客户端: 柱状图例子 var chartDa...
  • qq_22498277
  • qq_22498277
  • 2016年09月12日 20:29
  • 1449

开源MVC框架Struts (一) 对Servlet进一步封装和抽象

介绍 先不说Struts详细的工作流程以及其内部组成原理,先介绍一下它是干什么用的?什么时候用?想了解Struts前提你必须了解MVC设计模式,它是根据MVC开发出来的一套标准开发流程,你也可以...
  • lilongsheng1125
  • lilongsheng1125
  • 2013年08月10日 20:04
  • 2191

Struts2.5动态方法调用action和使用通配符访问action

当一个Action处理了多个控制逻辑的时候,可能需要使用这个Action中的不同方法来进行不同的处理,此时有两种方法可以选择。 1.动态方法调用Action。 这种方法,需要在struts.xml...
  • Leafage_M
  • Leafage_M
  • 2017年01月16日 22:43
  • 2468

Highcharts AJAX JSON JQuery 实现动态数据交互显示图表

Highcharts AJAX JSON JQuery 实现动态数据交互显示图表
  • educast
  • educast
  • 2016年10月09日 10:56
  • 1621

一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理

struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的...
  • shan9liang
  • shan9liang
  • 2013年03月18日 11:23
  • 10372

jquery highcharts组件--纵向柱状图标实例

highcharts报表示例                                            $(function () {                  var ...
  • u011537073
  • u011537073
  • 2016年07月10日 23:38
  • 1089

struts2下面如何同时使用servlet,就是如何实现struts与servlet共存

问题 项目要求struts2和servlet能够共存,就是struts的请求发给struts处理,servlet的请求发给servlet处理。目前web.xml文件应该是类似于如下的配置:  ...
  • u013358115
  • u013358115
  • 2014年03月07日 14:06
  • 688
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:struts中调用servlet动态生成柱状图到jsp页面
举报原因:
原因补充:

(最多只允许输入30个字)