国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

ART——一個輕量級的web報表工具

2019-11-14 21:48:49
字體:
來源:轉載
供稿:網友
ART——一個輕量級的web報表工具背景

無論業務上的數據怎么膨脹,哪怕是今天的大數據時代,數據處理的結果都是要給人來看的。對于業務和決策方來說,一個清晰的報表在數據時代是如虎添翼的。而對于開發人員來說,一個靈活易用的報表生成工具,也是能夠節省大量的重復開發,起到事半功倍的效果。有篇文章介紹了目前存在的12款優秀的報表工具,有桌面客戶端的,也有基于web的。原文地址:http://oss.org.cn/html/50/n-86250.html。

報表工具需要覆蓋的需求范圍是:

  1. 輕量,跨平臺,基于web
  2. 數據源管理
  3. SQL語句(動態)解析成條件query界面
  4. 執行select的SQL語言并能將結果輸出
  5. 各種輸出形式,比如jquery的datatables,Grid, cross table,pdf,xls等等
  6. 具備任務調度和郵件警告的輔助功能
  7. 用戶和每個sql映射的query的權限管理

經過對比,ART(a lightweight reporting solution) 幾乎能滿足和覆蓋常用的基于關系型數據庫的報表需求,下面就對這個報表工具進行介紹

部署
  1. ART的當前穩定版本是2.5.2,下載地址:http://sourceforge.net/PRojects/art/files/
  2. 部署容器jetty或者tomcat,我選擇jetty7,下載地址 http://download.eclipse.org/jetty/7.6.15.v20140411/dist/,不要使用jetty9,因為他使用的jdk7
  3. JDK 選擇 1.6
  4. 將ART進行解壓,找到art.war文件,放到jetty7的webapps目錄下,然后回到jetty的根路徑下執行下面的嗎命令,前提是自己的java_HOME已經配置好

    java -jar start.jar
  5. 這樣就啟動了art的web工程,瀏覽器中輸入http://localhost:8080/art/,如果能看到下圖就說明已經能夠成功啟動了

功能介紹和screenShots

點擊setting按鈕后,進入如下界面

下面就著重介紹一下里面的一些重要的功能的設置

  1. 配置ART的數據源和郵件服務等等,數據庫類型提供了常用的關系型數據庫,為了測試方便,我用選擇已經配置好的內存數據庫,如下圖所示,如果在真實的生產環境,則利用源碼中提供的DDL腳本,準備好相應的數據庫和表即可。

    設置完成后,一些額外的設置可以點擊"Optional Settings"進行相關設置,設置完成后提交即可。

  2. 增加數據源,ART可以適配各種關系型數據庫的數據源,滿足日常工作的需要,如下圖所示

  3. 配置queryGroups,這個主要是將一些query進行打包,方便授權給用戶或者用戶組
  4. Queries這個是整個art的核心的東西,也是日常工作經常用到的,配置query是art這個平臺的引擎。先看看創建一個新的query的界面。

這里有幾個主要的概念,你可以把這個query歸屬到某個group中,這樣是為了方便權限的授權。你可以選擇這個query的Type,比如普通的表格,3D的圖形。這個type選擇后,一些和這個type配套的配置也會動態變換著。datasource是sql語句運行到哪個數據庫上。Source SQL是我們要執行的sql語句,該語句可以是動態的,也可以是靜態的。在這個source的下面,會有一些提示,教你如何進行配置。我們常用的三大類queryType是:a,普通表格.b,圖形表格c,普通表格中的drill down查詢.

設置完基本的query配置后,我們還需要進行設置Parameter,這些parameter其實是和我們的sql source進行對應的。

這里你需要和動態sql的變量進行關聯,同時設置默認值,data的Type,是否需要drillDown。

對應的sql例子如下代碼

SELECT Period "Period", Region "Region", Volume "Volume"  FROM REGIONS_DATAMART  WHERE Period like #period# ORDER BY 1,2

針對查詢結果的一行,來進行drillDown是需要進行drill down query的配置的。

設置整個query后,效果如下

整個查詢都是自動解析出來的,是不是非常的便利

5.剩余的一些功能基本上是圍繞著用戶和query的權限關系,這里就不再詳細進行介紹。上面只是對art最核心的功能進行簡單的介紹,更多的功能還需要使用者自己去挖掘。

核心代碼解析

ART的源碼使用ant來進行build,頁面使用的jsp,java源碼放到WEB-INF的classes里面,這個有點不太適應的。個人感興趣的地方是動態query from表單如何生成,還有Result結果怎么輸出出來。

表單的查詢的頁面是http://localhost:8080/art/user/showParams.jsp?queryId=14,查看user下面的jsp頁面源碼,主要通過獲取該query關聯的parmaList來進行循環渲染到jsp的form中。

<jsp:useBean id="aq" scope="request" class="art.utils.ArtQuery" />List<ParamInterface> params = aq.getParamList();for(ParamInterface param : params) {.....}

在頁面中,執行按鈕會觸發一個Ajax請求,將這些參數封裝提供到后臺Servlet來進行處理

$("#response").load("ExecuteQuery",$form.serialize(),function(responseText, statusText, xhr){...}

重要的邏輯就是在這個ExecuteQuery的servlet中。下面詳細介紹下這個servlet,主要介紹初始化和doPost方法

  1. 初始化

    @Overridepublic void init(ServletConfig config) throws ServletException {super.init(config);//load all view modesList<String> allViewModes = ArtDBCP.getAllViewModes();viewModes = new HashMap<String, java.lang.Class>(allViewModes.size());ClassLoader cl = this.getClass().getClassLoader();String vm = "";try {for (String viewMode : allViewModes) {vm = viewMode;viewModes.put(vm, cl.loadClass("art.output." + vm + "Output"));}} catch (Exception e) {logger.error("Error while loading view mode: {}", vm, e);}} 

    目的是將art.output包下面的所有的以Output結尾的class加載到一個map中,這個主要是根據viewModes的形式來進行相關的輸出處理。處理類實現ArtOutputInterface接口,并由ArtOutHandler進行flush到servlet的response中

  2. 由preparedQuery生成最終需要執行的sql語句
  3. 執行sql取得結果,取得result和result的Metadata,調用ArtOutHandler的方法,找到具體的接口實現類,將結果輸出到頁面

    ArtOutHandler.flushOutput(messages, o, rs, rsmd, drilldownQueries, request.getContextPath(), inlineParams, multiParams);
  4. 具體的ArtOutHandler案例,以比較流程的jquery的datatables為例,類名叫做htmlDataTableOutput.部分代碼如下

    @Overridepublic void beginHeader() {/* * Code for datatables *///set language file to use for localization. language files to be put in the /js directory and to be named dataTables.xx_XX.txt//language file content examples at http://datatables.net/plug-ins/i18n//by default don't set the language file option. (will default to english - in jquery.dataTables.min.js)String languageSetting =""; String language="";if(locale!=null){language=locale.toString(); //e.g. en, en-us, it, fr etc}if (StringUtils.isNotBlank(language)) {String languageFileName = "dataTables." + language + ".txt";String sep = java.io.File.separator;String languageFilePath = ArtDBCP.getAppPath() + sep + "js" + sep + languageFileName;File languageFile = new File(languageFilePath);if (languageFile.exists()) {languageSetting = ", /"oLanguage/": {/"sUrl/": /"../js/" + languageFileName + "/"}";} }//set table options. see http://www.datatables.net/refString props = "{aaSorting: []"//+ ", /"sPaginationType/":/"full_numbers/""//+ ", /"bPaginate/": false"//+ ", /"sScrollY/": /"200px/""//+ ", /"bScrollCollapse/": true"//+ ", /"bProcessing/": true"+ languageSetting+ ", /"iDisplayLength/": 50" //default item in show entries e.g. -1+ ", /"aLengthMenu/": [[10, 25, 50, 100, -1], [10, 25, 50, 100, /"All/"]]" //show entries options+ "}";out.println("<link rel=/"stylesheet/" type=/"text/CSS/" href=/"../css/datatables.css/" /> ");out.println("<script type=/"text/Javascript/" language=/"javascript/" src=/"../js/jquery.js/"></script>");out.println("<script type=/"text/javascript/" language=/"javascript/" src=/"../js/jquery.dataTables.min.js/"></script>");out.println("<script type=/"text/javascript/" charset=/"utf-8/">");out.println("var $jQuery = jQuery.noConflict();");out.println("$jQuery(document).ready(function() {");out.println("$jQuery('#" + tableId + "').dataTable(" + props + ");");out.println("} );");out.println("</script>");//display parametersArtOutHandler.displayParameters(out, displayParams);//start results tableout.println("<div style=/"border: 1px solid black; width:80%; margin 0 auto/"><table class=/"display/" id=/"" + tableId + "/">");out.println(" <thead><tr>");}@Overridepublic void addHeaderCell(String s) {out.println("  <th>" + s + "</th>");}

將頁面需要用到html內容以java.io.PrintWriter的方式輸出到頁面進行渲染

總結

ART作為一個輕量級的報表解決方案,所實現的功能還是基本完備的,同時設計思路不是非常復雜,非常便于業務使用和開發同學的理解.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 湖口县| 珠海市| 洞头县| 盘锦市| 体育| 西畴县| 招远市| 岫岩| 九江市| 普安县| 临江市| 蕲春县| 清涧县| 广平县| 安泽县| 宁都县| 长子县| 康平县| 普兰店市| 平塘县| 河池市| 漳浦县| 维西| 苏尼特左旗| 本溪市| 修水县| 博白县| 玉田县| 石门县| 新竹市| 洪洞县| 搜索| 阿尔山市| 无锡市| 集安市| 镇远县| 女性| 泌阳县| 育儿| 鹿邑县| 沾益县|