1. 程式人生 > >在網頁中生成具有互動功能的統計圖(用到Serlvet/JSP)

在網頁中生成具有互動功能的統計圖(用到Serlvet/JSP)

今天研究了一個下午的開源統計工具JFreeChart,通過參考李剛所著《Struts2權威指南》,完成了一個在網頁中生成具有互動功能的統計圖的案例。

效果圖如下:

現在記錄如下,以供日後實踐參考:

基本步驟如下:

二、建立記錄圖書銷售情況的資料庫,在這裡我用test表示我的資料庫,表名為jfreechart_book,資料庫指令碼如下:

            create table `test`.`jfreechart_book`(
            `id` int unsigned not null auto_increment,
           `book_name` varchar(45) default '' not null,
           `book_count` int unsigned default '0' not null,
            primary key (`id`)
            );
            create unique index `PRIMARY` on `test`.`jfreechart_book`(`id`);

三、用java 開發工具Eclilpse+MyEclipse IDE建立一個web project:JFreeChartDemo

四、將下載好所需要的包並解壓,將解壓好的jar包拷貝到上面建立好的工程的lib下

五、開始編碼

    (1)編寫連線資料庫的類DBConnection                   

    (2)編寫資料庫表對應的java類Book                

    (3)編寫操作資料庫(這裡只提供查詢操作)dao類BookManagerDAO

    (4)編寫由JFreeChart這個組建構造統計圖的類CreateChart

                /**
 * @author qpy_2006
 */
public class CreateChart {
 
 /** 通過引數map物件從資料庫中獲取資料,用以建立一個DefaultPieDataset物件 */
 public DefaultPieDataset getDataset(Map<Integer,Book> map)
 {
  DefaultPieDataset dataSet = new DefaultPieDataset();
  Collection<Book> collection = map.values();
  Iterator<Book> it = collection.iterator();
  while(it.hasNext())
  {
   Book book = it.next();
   dataSet.setValue(book.getBookName(), book.getBookCount());
  }
  return dataSet;
 }
 
 public JFreeChart getChart(DefaultPieDataset dataSet)
 {
  /* chart的標題可以自行定義,在這裡就省略了 */
  JFreeChart chart = ChartFactory.createPieChart("圖書銷售量統計圖",dataSet,true,false,true);
  /**
   * 設定chart物件的各種屬性
   */
  // 設定圖示標題,及字型
  chart.setTitle(new TextTitle("圖書銷售統計圖",new Font("黑體",Font.BOLD,22)));
  //取得統計圖表的第一個圖例
  LegendTitle legend = chart.getLegend(0);
  //修改這個圖例的字型
  legend.setItemFont(new Font("宋體",Font.ITALIC,12));
  //獲得餅圖的Plot物件
  PiePlot plot = (PiePlot) chart.getPlot();
  //設定餅圖各部分的標籤字型
  plot.setLabelFont(new Font("楷體",Font.PLAIN,22));
  //設定背景透明度(0-1.0之間)
  plot.setBackgroundAlpha(0.9f);
  //設定前景透明度(0-1.0之間)
  plot.setForegroundAlpha(0.5f);
  return chart;
 }
}

    (5)編寫系統控制器Servlet類ChartServlet

 /**
 * @author qpy_2006
 */
public class ChartServlet extends HttpServlet {

 private static final long serialVersionUID = 7292944149506099810L;

 public ChartServlet() {
  super();
 }

 public void destroy() {
  super.destroy();   
 }

 public void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  this.doPost(request, response);
 }
 /**
  * @author qpy_2006
  */
 public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {  
  response.setContentType("image/jpeg;charset=gbk");
  /* 統計圖示的標題可以由使用者自己定義 */  
  OutputStream out = response.getOutputStream();
  CreateChart createChart = new CreateChart();
  Map<Integer,Book> map = new HashMap<Integer,Book>();
  try {
   map = BookManagerDAO.getAllBook();
  } catch (ClassNotFoundException e) {
   System.err.println("servlet doPost-->"+e.getMessage());
  }  
  JFreeChart chart = createChart.getChart(createChart.getDataset(map));
  ChartUtilities.writeChartAsJPEG(out, 1, chart, 780, 600, null);
  out.close();
 }
}

    (6)在web.xml檔案中配置第五步建立好的ChartServlet類

 <servlet>
  <display-name>ChartServlet</display-name>
  <servlet-name>ChartServlet</servlet-name>
  <servlet-class>org.qpy.servlet.ChartServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>ChartServlet</servlet-name>
  <url-pattern>/chart</url-pattern>
 </servlet-mapping>

    (7)建立一個用於向該ChartServlet發出請求的jsp頁面

<%@ page language="java" pageEncoding="GBK"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>圖書銷售統計圖</title>
 <meta http-equiv="pragma" content="no-cache">
 <meta http-equiv="cache-control" content="no-cache">
 <meta http-equiv="expires" content="0">   
 <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
 <meta http-equiv="description" content="This is my page">
  </head>
  <body>
   <div><span><a href="<%=path %>/chart">檢視圖書銷售統計圖</a> </span></div>
  </body>
</html>

工程的目錄結構如下圖:

相關推薦

網頁生成具有互動功能統計Serlvet/JSP

今天研究了一個下午的開源統計工具JFreeChart,通過參考李剛所著《Struts2權威指南》,完成了一個在網頁中生成具有互動功能的統計圖的案例。 效果圖如下: 現在記錄如下,以供日後實踐參考: 基本步驟如下: 二、建立記錄圖書銷售情況的資料庫,在這裡我用test表示我

解決一個表的資料由同表兩欄位加權和得到觸發器解決

本次實驗一張表中的90%的資料由相關連的外表(b表)資料得到,即用觸發器得到。 https://blog.csdn.net/IT_95/article/details/84064958 那麼如何實現這張表裡面的資料得到一個總的值放在一個欄位呢? 第一時間的想法是在這張表(b表)裡面加觸發

科室管理系統,運用百度編輯器ueditor1_4_3-utf8-jsp出現的一系列問題!

1.首先下載ueditor1_4_3-utf8-jsp並解壓,下載地址:http://ueditor.baidu.com/website/download.html 2,在MyEclipse裡新建一個

java網頁端資料傳輸到後端程式Servlet 和jsp

Servlet和jsp兩種方式 將網頁中form表單中的資料傳輸到服務端 Tomcat 首先需要下載一個Tomcat伺服器,用來發佈網站,版本可以任意選擇,在Tomcat裡面會帶有servlet的jar包 首先使用servlet Ja

網頁記住密碼這個功能的非安全性

  大家都知道網頁中有一種功能就是當我們登入的時候會提示我們是否儲存或記住密碼、當我們點選儲存或者記住密碼以後,我們下次登陸時不需要重新輸入密碼即可快速登入、比如就拿我們的部落格中博文來說,當我們寫了博文設定相應密碼之後,再次訪問博文時,我們輸入相應密碼成功進入博文後會提示我們儲存密碼、如下圖:     

使用ECharts實現各種資料統計,柱狀,折線在javaWeb的應用

具體的資源及頁面程式碼可下載  http://download.csdn.net/download/dll322/9912507 準備工作:要下載ECharts的原始檔 第一步:在web端既新建一個jsp頁面 第二步:引入ECharts的js 第三步:為EChart

web開發常用的幾種統計使用

最近,筆者結合自己在公司專案使用統計圖的經驗以及自己的研究,對地圖統計、柱形圖統計、餅圖統計以及折線圖統計這幾種常用的統計作以歸納。主要使用到的js框架是highstock.js,一種完全基於javascript的前端框架。接下來,一一進行講解。 一、地圖

網頁 生成QQ線上臨時對話方塊/聊天

2)在“頁面設定”中選擇“設定部落格首頁模版”,在其中“自定義內容元件”內選擇“新增文字元件”下面是我已經設定好了的三個元件的效果圖,未設定之前這裡是空白的,您可以通過自定義元件新增文字元件任意新增自己喜歡的內容、公告資訊、個人介紹、插入圖片或其它多媒體檔案;

網頁實現分頁功能的幾種方法

當我們在做一些類似於貼吧展示帖子這種專案的時候,由於帖子的數量比較多,就會用到分頁的技術。這裡我將介紹幾種幾種方式來實現分頁的技術。首先我們先來了解一下分頁功能的核心技術點:1.       首先先規定每一頁顯示多少張貼子數,這樣才能計算總共有多少頁。2.       然後再

Python 爬取網頁JavaScript動態添加的內容

python tab sta exe div int rom ava script 使用 selenium + phantomjs 實現 1、準備環境 selenium(一個用於web應用程測試的工具)安裝:pip install seleniumphantomjs(是

從Tensorflow模型檔案解析並顯示網路結構CKPT模型篇

上一篇文章《從Tensorflow模型檔案中解析並顯示網路結構圖(pb模型篇)》中介紹瞭如何從pb模型檔案中提取網路結構圖並實現視覺化,本文介紹如何從CKPT模型檔案中提取網路結構圖並實現視覺化。理論上

手把手教你編寫一個具有基本功能的shell已開源

/*read command line until EOF*/while(read(stdin,buffer,numchars)){    /*parse command line*/    if(/* command line contains & */)        amper = 1;   

GitHub+hexo+gitment搭建一個具有評論功能的個人部落格(入門級

電腦環境是Windows,安裝好git後,所有搭建操作均在git bash內完成 1.安裝git, node.js, npm (注意:首次安裝git 要配置user資訊 $git config --global user.name "yourname"   #(yourna

在TensorFlow對比兩大生成模型:VAE與GAN附測試程式碼

 def GAN_loss_with_labels(true_logit, fake_logit):      """        Args:          true_logit : Given data from true distribution,                    

android自定義環形統計帶動畫

一、測試截圖 二、實現原理  package com.freedomanlib; import java.util.Timer; import java.util.TimerTask; import android.annotation.SuppressLint;

java實現各種資料統計柱形,餅,折線

最近在做資料探勘的課程設計,需要將資料分析的結果很直觀的展現給使用者,這就要用到資料統計圖,要實現這個功能就需要幾個第三方包了: 1.       jfreechart-1.0.13.jar 2.       jcommon-1.0.16.jar 3.       gnuj

獲取網頁的視訊下載地址headless browser

介紹 前面通過兩篇文章講了怎麼去抓取HTTP的請求包,包括用代理伺服器和抓包的方法。正因為現在的視訊網站的視訊地址都不是直接在html頁面上獲取的,視訊的獲取是通過瀏覽器動態解釋js指令碼,再向視訊伺服器發去視訊請求。所以我們通過獲取瀏覽器產生的HTTP請求來

分散式系統應用生成全域性唯一ID的演算法snowflake)----java 實現,單例模式

概述 在分散式系統中,有很多的地方需要生成全域性id的場景,比方說,訂單模組,使用者id等。這種情況下大多數的做法是通過UUID來做處理。首先,UUID是36位的一個字串,相對來說是比較長的,一般我們採用的資料庫會是MySQL,因為大多數的情況下,我們都希望我們的資料是可以

[Linux] Linux 的基本命令與目錄結構待移除

head 命令 存在 壓縮 下載 創建文件 name 批處理 targe 簡化 Linux 中的基本命令與目錄結構 目錄 一、Linux 基本目錄結構 二、基本命令 三、瀏覽目錄 四、中間命令 五、更改密碼 六、環境變量和 shell 變量 七、命令路徑

轉:【Java並發編程】之十二:線程間通信notifyAll造成的早期通知問題含代碼

data light lan 添加項 article util tool 元素 seconds 轉載請註明出處:http://blog.csdn.net/ns_code/article/details/17229601 如果線程在等待時接到通知,但線程等待的條件