34-2.Spark大型电商项目-用户访问session分析-session聚合统计之计算统计结果可视化

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/someby/article/details/88700765

目录

代码

ISessionAggrStatDAO.java

SessionAggrStatDAOImpl.java

ServletSessionAggrStat.java

SessionAggrStatSelectTest.java

jsp目录下----sessionAggrstat.jsp//写的真的很乱

测试结果


本篇文章将介绍用户访问session分析-session聚合统计之计算统计结果可视化。

代码

(到这相信目录结构已经有印象了,就不详细写了)

ISessionAggrStatDAO.java

    /**
     * 查询session聚合类的统计结果
     * @param sessionAggrStat
     * @return
     */
    Map<String,Object> select(SessionAggrStat sessionAggrStat);

SessionAggrStatDAOImpl.java

/**
     * session聚合分析可视化
     * @param sessionAggrStat
     * @return 返回一个session访问数最多的一条记录
     */
    public Map<String,Object> select(SessionAggrStat sessionAggrStat){
        String sql = "select * from session_aggr_stat "
                +" order by session_count desc "
                +" limit 1";
        Map<String,Object> map = new HashMap<String,Object>();
        double[] visitLength = new double[9];
        double[] visitStep = new double[6];
        long[] taskid = new long[1];
        long[] sessionCount = new long[1];

        Object[] params = new Object[]{};
        JDBCHelper jdbcHelper = JDBCHelper.getInstance();
        jdbcHelper.executeQuery(sql, params, new JDBCHelper.QueryCallback() {
            @Override
            public void process(ResultSet rs) throws Exception {
                while (rs.next()){
                    taskid[0] = rs.getLong("task_id");
                    sessionCount[0] = rs.getLong("session_count");
                    visitLength[0] = rs.getDouble("1s_3s");
                    visitLength[1] = rs.getDouble("4s_6s");
                    visitLength[2] = rs.getDouble("7s_9s");
                    visitLength[3] = rs.getDouble("10s_30s");
                    visitLength[4] = rs.getDouble("30s_60s");
                    visitLength[5] = rs.getDouble("1m_3m");
                    visitLength[6] = rs.getDouble("3m_10m");
                    visitLength[7] =rs.getDouble("10m_30m");
                    visitLength[8]= rs.getDouble("30m");

                    visitStep[0]= rs.getDouble("1_3");
                    visitStep[1] = rs.getDouble("4_6");
                    visitStep[2] = rs.getDouble("7_9");
                    visitStep[3] = rs.getDouble("10_30");
                    visitStep[4] = rs.getDouble("30_60");
                    visitStep[5] = rs.getDouble("60");
                
                }

            }
        });
        /*System.out.println("visitLength: "+ visitLength.toString());
        System.out.println("visitStep: " + visitStep.toString());*/
        map.put("taskid",taskid[0]);
        map.put("sessionCount",sessionCount[0]);
        map.put("visitLength",visitLength);
        map.put("visitStep",visitStep);

        return map;
    }

ServletSessionAggrStat.java

package graduation.java.servlet;

import graduation.java.dao.ISessionAggrStatDAO;
import graduation.java.domain.SessionAggrStat;
import graduation.java.impl.SessionAggrStatDAOImpl;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.Map;

/**
 * FileName: ServletSessionAggrStat
 * Author:   hadoop
 * Email:    [email protected]
 * Date:     19-3-18 下午9:37
 * Description:
 * 实现session聚合分析数据的提取,并展示在jsp上
 */
@WebServlet(name="ServletSessionAggrStat",value = "/ServletSessionAggrStat")
public class ServletSessionAggrStat extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request,HttpServletResponse response) throws  ServletException,IOException{
        ISessionAggrStatDAO sessionAggrStatDAO = new SessionAggrStatDAOImpl();
        SessionAggrStat sessionAggrStats = new SessionAggrStat();
        Map<String,Object> sessionAggrStat;
        System.out.println("==============================");
        sessionAggrStat = sessionAggrStatDAO.select(sessionAggrStats);
        request.setAttribute("sessionAggrStat", sessionAggrStat);
        request.getRequestDispatcher("/WEB-INF/jsp/sessionAggrstat.jsp").forward(request, response);
    }
}

SessionAggrStatSelectTest.java

package graduation.java.test;

import graduation.java.dao.ISessionAggrStatDAO;
import graduation.java.domain.SessionAggrStat;
import graduation.java.impl.DAOFactory;

import java.util.Map;

/**
 * FileName: SessionAggrStatSelectTest
 * Author:   hadoop
 * Email:    [email protected]
 * Date:     19-3-18 下午9:07
 * Description:测试session聚合数据的单条查询
 */
public class SessionAggrStatSelectTest {
    public static void main(String[] args){
        SessionAggrStat sessionAggrStat = new SessionAggrStat();
        ISessionAggrStatDAO sessionAggrStatDAO = DAOFactory.getSessionAggrStatDAO();
        Map<String,Object> map = sessionAggrStatDAO.select(sessionAggrStat);
        double[] lenghtArrays = new double[9];
        double[] stepArrays = new double[6];
        lenghtArrays = (double[]) map.get("visitLength");
        stepArrays = (double[]) map.get("visitStep");
        long taskid = (long)map.get("taskid");
        long sessionCount = (long)map.get("sessionCount");
        System.out.println("taskId: "+ taskid);
        System.out.println("sessionCount: "+ sessionCount);
        System.out.print("visitLength: ");
       for (int i = 0; i < lenghtArrays.length; i++){
           System.out.print(lenghtArrays[i] + "\t");
       }
       System.out.println();
       System.out.print("visitStep: ");
        for (int i = 0; i < stepArrays.length; i++){
            System.out.print(stepArrays[i] + "\t");
        }
    }
}

jsp目录下----sessionAggrstat.jsp//写的真的很乱

<%@ page import="java.util.List" %>
<%@ page import="graduation.java.domain.Goods" %>
<%@ page import="java.util.Arrays" %>
<%@ page import="java.util.ArrayList" %>
<%@ page import="java.util.Map" %>
<%@ page import="com.alibaba.fastjson.JSONObject" %><%--
  Created by IntelliJ IDEA.
  User: hadoop
  Date: 19-3-19
  Time: 下午4:19
  To change this template use File | Settings | File Templates.
--%>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%
    Map<String,Object> map  = (Map<String,Object>)request.getAttribute("sessionAggrStat");
    long taskid = (long) map.get("taskid");
    long sessionCount = (long) map.get("sessionCount");
    double[] lengthArrays = (double[])map.get("visitLength");
    double[] stepArrays = (double[])map.get("visitStep");
    String[] stepname = {"1-3","4-6","7-9","10-30","30-60","60"};
    JSONObject step = new JSONObject();
    int eachStep = 0;
    String str = "";
    for (int j = 0; j < stepArrays.length;j++){
        eachStep = (int)(sessionCount * stepArrays[j]);
        str += "{value:"+eachStep+", "+ "name:\'"+stepname[j]+"\'},";
        step.put(stepname[j],eachStep);
    }
    str = str.substring(0,str.length()-1);
   /* System.out.println("====="+step.toJSONString());
    System.out.println("String; "+str);


    System.out.println("taskId: "+ taskid);
    System.out.println("sessionCount: "+ sessionCount);
    System.out.print("visitLength: ");
    for (int i = 0; i < lengthArrays.length; i++){
        System.out.print(lengthArrays[i] + "\t");
    }
    System.out.println();
    System.out.print("visitStep: ");
    for (int i = 0; i < stepArrays.length; i++){
        System.out.print(stepArrays[i] + "\t");
    }*/
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>用户访问Session聚合分析</title>
    <!-- 引入 echarts.js -->
    <script type="text/javascript" src="http://echarts.baidu.com/gallery/vendors/echarts/echarts-all-3.js"></script>
    <style>
        .div-a{ float:left;width:49%;border:0px solid }
        .div-b{ float:left;width:49%;border:0px solid }
        .top{width:100%;
            height:100px;
            line-height:100px;
            text-align:center;
            /*border:1px solid #F00;*/
            font-weight:bold;
            font-size: 30px;
        }
    </style>
</head>
<body>
<!-- 为ECharts准备一个具备大小(宽高)的Dom -->
<div class="top">用户访问Session聚合分析</div>
<div style="margin-top:50px;margin-left: 40px">
    <div id="visitlength" class="div-a" style="width: 600px;height:400px;"></div>
    <div id="visitstep" class="div-b" style="width: 600px;height:400px;"></div>
</div>

<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('visitlength'));
    // 指定图表的配置项和数据
    var taskid = <%=taskid%>;
    var task = "            任务"+taskid;
    var visitLength = <%=Arrays.toString(lengthArrays)%>;
    var visitStep = <%=Arrays.toString(stepArrays)%>;
    var length = ['1s-3s','4s-6s','7s-9s','10s-30s','30s-60s','1m-3m','3m-10m','10m-30','30m'];
    var step = ['1-3','4-6','7-9','10-30','30-60','60'];
    var option = {
        title: {
            text: '用户访问时长统计',
            subtext: task
        },
        tooltip: {},
        legend: {
            data:['访问量']
        },
        xAxis: {
            data: length,
            axisLabel : {
                show:true,
                interval: 0//,    // {number}
                //rotate: 45,
                // margin: 8

            }

        },
        yAxis: {},
        series: [{
            name: '访问量',
            type: 'bar',
            data: visitLength
        }]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
<script type="text/javascript">
    // 基于准备好的dom,初始化echarts实例
    var myChart = echarts.init(document.getElementById('visitstep'));
    // 指定图表的配置项和数据

    var stepJson =[<%=str%>];
    var task = "任务"+taskid;
    var step = ['1-3','4-6','7-9','10-30','30-60','60'];
    option = {
        title : {
            text: '页面访问步长比例',
            subtext: task,
            x:'center'
        },
        tooltip : {
            trigger: 'item',
            formatter: "{a} <br/>{b} : {c} ({d}%)"
        },
        legend: {
            orient: 'vertical',
            left: 'left',
            data: step
        },
        series : [
            {
                name: '访问来源',
                type: 'pie',
                radius : '55%',
                center: ['50%', '60%'],
                data:stepJson,
                itemStyle: {
                    emphasis: {
                        shadowBlur: 10,
                        shadowOffsetX: 0,
                        shadowColor: 'rgba(0, 0, 0, 0.5)'
                    }
                }
            }
        ]
    };
    // 使用刚指定的配置项和数据显示图表。
    myChart.setOption(option);
</script>
</body>
</html>

测试结果

猜你喜欢

转载自blog.csdn.net/someby/article/details/88700765
今日推荐