SSM杰信商务平台项目day09

本文探讨了Java实现图形报表的多种方式,包括jFreeChart、Excel和amCharts,并对比了它们的优缺点。文章详细讲解了如何利用Log4j进行系统监控,以及在项目中使用POI进行数据导入。最后,对图表报表的知识进行了回顾,强调了amCharts Flash的出色表现力和易用性。
摘要由CSDN通过智能技术生成

重点内容第九天 图形报表~让微软都羡慕的报表

1.Java要实现图形报表都有什么方式?

jFreeChart 纯java API,利用生成一张图片。
excel 图形报表,poi不能直接操作图形报表控件。变相解决,先做一个excel模板,插入好图表控件,然后利用poi动态设置它的数据。用户

打开excel,图表直接展现。
第三方的报表软件,可视化开发。开发效率极高。
可视化布局界面,配置数据源即可。(SQL的结果集)。收费。数巨报表(10w,每年服务费1w)。做一个应用程序,(C/S程序),IE上安装插件。兼容性。

amCharts FLASH,只需要构建数据xml。

1)需要swf控件,例如饼形通用
2)setting.xml 不通用的
3)data.xml、data.txt,xml格式更加直观,不通用的

这里写图片描述

sqlDao查询结果集的封装,通用

这里写图片描述

工作原理
amCharts只需要一次配置,公用flash,改造index.html,访问公用的swfobject.js和公用的flash swf原来文件。样式文件访问本地的,这样可以方便修改配置颜色,坐标,显示样式等。数据data.xml文件。将从数据库中读取的数据拼接成xml节点,写入到这个文本的文件中。转向jStat.jsp统一转向对应的forward参数目录下的index.html。(注意:html浏览器默认都有缓存,在做index.html要去掉缓存)

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="Cache-Control" content="no-cache, must-revalidate">
<meta http-equiv="expires" content="Wed, 26 Feb 1997 08:21:57 GMT">

2.jFreeChart、excel、amCharts PK比较

jFreeChart 纯java api,缺点:图形非常粗糙,它实际是利用jFreeChart api生成的图片,表现力差,专门的api需要记忆。

a)生产厂家销售情况-饼形图

需求:
生产厂家销售情况,厂家+销售

SELECT
    f.factory_name,cp.sumnum
FROM
(SELECT factory_id,factory_name FROM factory_c WHERE state=1) f
LEFT JOIN 
(
SELECT factory_id,SUM(cnumber) AS sumnum FROM contract_product_c
GROUP BY factory_id
) cp
ON f.factory_id=cp.factory_id
WHERE cp.sumnum IS NOT null

这里写图片描述

这里写图片描述

这里写图片描述

b)产品销售排行-柱状图

需求:
产品销售情况,畅销的产品的前10名,产品+销售

SELECT product_no,SUM(cnumber) AS sumnum FROM contract_product_c
GROUP BY product_no ORDER BY sumnum DESC
LIMIT 10

这里写图片描述

这里写图片描述

这里写图片描述

c)系统访问压力图-曲线图

需求:系统访问压力图
记录用户登陆系统,就记录一条

这里写图片描述

统计每天登陆系统的次数

SELECT SUBSTRING(login_time,1,10),COUNT(login_time) FROM login_log_p
GROUP BY SUBSTRING(login_time,1,10)

统计24小时系统访问的次数
当数据不够时,利用临时表凑数据

SELECT
    t.a1,IFNULL(p.countnum,0) AS countnum
FROM
(SELECT a1 FROM online_t)  t
LEFT JOIN
(
SELECT SUBSTRING(login_time,12,2) AS a1,COUNT(login_time) AS countnum FROM login_log_p
GROUP BY SUBSTRING(login_time,12,2)
) p
ON t.a1=p.a1

这里写图片描述

这里写图片描述

这里写图片描述

总结:
图形报表业界已经相当成熟,提出公用,称作报表引擎。

3.系统的监控,系统想知道系统的访问瓶颈在哪里?

需求
系统瓶颈是指,访问最长时间,写数据操作,写磁盘文件操作。都比较耗时,用户体验不好。

1)找出系统这些操作慢的地方,
2)分析原因
3)优化,用户使用频繁模块,对其优化

实现一个性能监控的程序

a)早期使用继承方式

记录开始时间,记录结束时间,结束时间-开始时间=耗时
写到日志文件中,写到数据库中

b)拦截器

配置springmvc拦截器,记录开始时间,结束时间,打日志。

c)开发步骤

1)写一个拦截器,实现一个接口HandlerInterceptor
2)实现共用的变量,安全性
3)配置springmvc拦截器配置,springmvc-servlet.xml

package cn.itcast.jk.interceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.core.NamedThreadLocal;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import common.Logger;

//功能:实现对所有类方法执行时间的监控
public class TimeInterceptor implements HandlerInterceptor {
    //引入log4j日志
    private static Logger log = Logger.getLogger(TimeInterceptor.class);

    //利用ThreadLocal绑定一个变量,完成线程安全
    NamedThreadLocal<Long> startTimeThreadLocal = new NamedThreadLocal<Long>("startTimeThreadLocal");

    //处理类之前,执行preHandle方法
    @Override
    public boolean preHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler) throws Exception {
        long startTime = System.currentTimeMillis();        //记录当前时间
        startTimeThreadLocal.set(startTime);                //绑定变量

        return true;
    }

    //处理类之后,执行postHandler方法
    @Override
    public void postHandle(HttpServletRequest request,
            HttpServletResponse response, Object handler,
            ModelAndView modelAndView) throws Exception {
        long stopTime = System.currentTimeMillis();         //记录结束时间

        log.info(String.format("%s execute %d ms."
                ,request.getRequestURI()
                , stopTime - startTimeThreadLocal.get()));

    }

    //所有的动作完成,执行一些方法
    @Override
    public void afterCompletion(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex)
            throws Exception {
        // TODO Auto-generated method stub

    }

}

sprimgmvc-servlet.xml中配置

<!-- 3.拦截器 -->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/**"/><!-- 拦截所有请求 -->
            <bean class="cn.itcast.jk.interceptor.TimeInterceptor"/>        
        </mvc:interceptor>
    </mvc:interceptors>

4.项目中使用Log4j

a)导入jar包

b)配置log4j.properties

log4j.rootLogger=DEBUG, stdout      

配置日志级别 OFF,FANIL,ERROR,WARN,INFO,DEBUG,TRACE,ALL 提供8个级别,log4j推荐开发者使用4个级别:

ERROR:错误信息,trycatch抛出异常,log.error(“”)
WARN:警告信息
INFO:提示
DEBUG:BUG很多时候,监控过程变量,调试

顺序级别,级别由低到高,高级别的信息会包含打印低级别的信息。

Stout输出地点,包括:控制台,文件,数据库

log4j.rootLogger=DEBUG, stdout

#Console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%-5p - %m%n

#LogFile
log4j.appender.file=org.apache.log4j.FileAppender
log4j.appender.file.File=../logs/jklog.log
log4j.appender.file.layout=org.apache.log4j.PatternLayout
log4j.appender.file.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n


log4j.logger.org.apache=INFO
log4j.logger.cn.itcast.jk=DEBUG

c)调用方法:

public class TimeInterceptor implements HandlerInterceptor {
    //引入log4j日志
    private static Logger log = Logger.getLogger(TimeInterceptor.class);

类中类似System.out.println()
        log.info(String.format("%s execute %d ms."
                ,request.getRequestURI()
                , stopTime - startTimeThreadLocal.get()));

5.POI导入

直接读取文件内容,形成SQL语句,批量插入数据库。

这里写图片描述

导入时,excel文档它单元格有类型。

1)类型,根据不同的类型拼接不同的sql
2)模板,自己定义一个模板,让用户将数据导入。模板要设置将所有的单元格设置为文本类型,导入的数据就都是文本。
3)没有通用性,要根据具体业务做一个这样类。
4)插入SQL语句。

6.知识回顾

a)项目统计分析核心模块

软件的核心价值:
举例:了解杰信有哪些现有的产品畅销,VIP客户,什么产品滞销。指导企业经营。
为企业经营决策提供数据支持。
在基础数据中挖掘有价值的信息。再次提炼。~ 数据挖掘。

b)图表报表

1)第三方报表,用户展现效果最好,功能齐全,开发效果。收费
2)jFreeChart 古老,api繁杂,开发效率不高,生成图片
3)jReport 复杂
4)excel (企业中常采用)
5)javascript amCharts (收费)
6)amCharts Flash

c)amCharts Flash 表现力酷炫,使用最简单,

1)SQL的数据源
2)动态生成data.xml

d)图形报表常见

1)饼形图
2)柱状图
3)曲线图

课程视频内容

这里写图片描述

这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值