`
famoushz
  • 浏览: 2978190 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

利用clickstream跟踪用户

阅读更多

具体的例子可以看clickstream-1.0.2.war

Clickstream 概述

一个用来跟踪正在你的站点上访问的用户所到达位置细节的工具。它允许你跟踪访问你的站点的“点击流”或者“传输路径”。请访问JIRA的更新日志 来了解Clickstream最近的发展。

特性

• 当用户会话产生时,开始跟踪点击流。(通过一个监听器 )
• 跟踪用户产生的每次点击信息。(通过一个过滤器 )
• 当用户会话终止时,将完整的点击流记录到文件或者PrintStream中。
• 设法发现用户是不是机器人,并进行适当的过滤(目前可以检测252种机器人)

安装

clickstream-1.0.2.jar and commons-logging.jar 放到[web应用程序根目录]/WEB-INF/lib里,把下面的代码加到[web应用程序根目录]/WEB-INF/web.xml里面:

<filter>
      <filter-name>clickstream</filter-name>
      <filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>
</filter>

<filter-mapping>
      <filter-name>clickstream</filter-name>
      <url-pattern>*.jsp</url-pattern>
</filter-mapping>

<filter-mapping>
      <filter-name>clickstream</filter-name>
      <url-pattern>*.html</url-pattern>
</filter-mapping>

<listener>
<listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>
</listener>



根据上面的配置,Clickstream会跟踪所有对jsp或者html文件的请求.无论什么时候,只要一个HttpSession失效了,对那个会话的完整点击流就会被记录。如果你想跟踪对其他类型的点击(例如.txt或者pdf文件),只需要添加更多的filter-mapping就可以了。

下面是一个完整的web.xml的例子

 <?xml version="1.0" encoding="ISO-8859-1" ?> 
    <!DOCTYPE web-app (View Source for full doctype...)> 
    <web-app>
    <display-name>Opensymphony Clickstream Example</display-name> 
    <filter>
      <filter-name>clickstream</filter-name> 
      <filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class> 
    </filter>
    <filter-mapping>
      <filter-name>clickstream</filter-name> 
      <url-pattern>/*</url-pattern> 
    </filter-mapping>

    <listener>
      <listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>
    </listener>
    </web-app>



你可以利用clickstreams.jsp

<%@ page import="java.util.*,
                   com.opensymphony.clickstream.Clickstream" %>

<%
      Map clickstreams = (Map) application.getAttribute("clickstreams");

      String showbots = "false";
      if ("true".equalsIgnoreCase(request.getParameter("showbots")))
          showbots = "true";
      else if ("both".equalsIgnoreCase(request.getParameter("showbots")))
          showbots = "both";
%>
<html>
      <head>
          <title>All Clickstreams</title>
      </head>
    
      <body>
          <h1>All Clickstreams</h1>

          <a href="?showbots=false">No Bots</a> |
          <a href="?showbots=true">All Bots</a> |
          <a href="?showbots=both">Both</a>
        
          <p>        
          <% if (clickstreams.isEmpty()) { %>
            No clickstreams in progress.
          <% } else {
              synchronized(clickstreams) {
                  Iterator it = clickstreams.keySet().iterator();
                  int count = 0;
                  while (it.hasNext())
                  {
                      String key = (String)it.next();
                      Clickstream stream = (Clickstream)clickstreams.get(key);

                      if (showbots.equals("false") && stream.isBot())
                      {
                          continue;
                      }
                      else if (showbots.equals("true") && !stream.isBot())
                      {
                          continue;
                      }

                      count++;
                      try {
                  %>
                  <%= count %>. <a href="viewstream.jsp?sid=<%= key %>"><b><%= (stream.getHostname() != null &&  
!stream.getHostname().equals("") ? stream.getHostname() : "Stream") %></b></a> <font size="-1">[<%= stream.getStream().size()  
%> reqs]</font><br>
                  <%
                      }
                      catch (Exception e)
                      {
                  %>
                      An error occurred - <%= e %><br>
                  <%
                      }
                  }
              }
          }
          %>
          </p>
      </body>
</html>


和viewstream.jsp来显示系统当前的Clickstream活动。

<%@ page import="java.util.*,
                   com.opensymphony.clickstream.Clickstream,
                   com.opensymphony.clickstream.ClickstreamRequest" %>

<%
if (request.getParameter("sid") == null)
{
    response.sendRedirect("clickstreams.jsp");
    return;
}

Map clickstreams = (Map)application.getAttribute("clickstreams");

Clickstream stream = null;

if (clickstreams.get(request.getParameter("sid")) != null)
{
    stream = (Clickstream)clickstreams.get(request.getParameter("sid"));
}

if (stream == null)
{
    response.sendRedirect("clickstreams.jsp");
    return;
}
%>

<html>
      <head>
          <title>Clickstream for <%= stream.getHostname() %></title>
      </head>
    
      <body>
          <div align="right"><a href="clickstreams.jsp">All streams</a></div>

          <h1>Clickstream for <%= stream.getHostname() %></h1>

          <b>Initial Referrer</b>: <a href="<%= stream.getInitialReferrer() %>"><%= stream.getInitialReferrer() %></a><br>
          <b>Hostname</b>: <%= stream.getHostname() %><br>
          <b>Session ID</b>: <%= request.getParameter("sid") %><br>
          <b>Bot</b>: <%= stream.isBot() ? "Yes" : "No" %><br>
          <b>Stream Start</b>: <%= stream.getStart() %><br>
          <b>Last Request</b>: <%= stream.getLastRequest() %><br>
        
          <% long streamLength = stream.getLastRequest().getTime() - stream.getStart().getTime(); %>
          <b>Session Length</b>:
            <%= (streamLength > 3600000 ?
              " " + (streamLength / 3600000) + " hours" : "") +
            (streamLength > 60000 ?
              " " + ((streamLength / 60000) % 60) + " minutes" : "") +
            (streamLength > 1000 ?
              " " + ((streamLength / 1000) % 60) + " seconds" : "") %><br>
        
          <b># of Requests</b>: <%= stream.getStream().size() %>
        
          <p><b>Click stream</b>:</p>
        
          <table border="0" cellpadding="2">
          <%
          synchronized(stream) {
              Iterator clickstreamIt = stream.getStream().iterator();

              int count = 0;
              while (clickstreamIt.hasNext())
              {
                  count++;
                  String click = ((ClickstreamRequest)clickstreamIt.next()).toString();
              %>
              <tr><td><%= count %>:</td><td><a href="http://<%= click %>"><%= click %></a></td></tr>
              <%
              }
          }
          %>
          </table>
      </body>
</html>



配置

日志功能是非常基本的(你可以与log4j集成 )。如果你需要更多更高级的日志功能,那就需要实现com.opensymphony.clickstream.logger.ClickstreamLogger 接口并且提供任何你所希望的持久化方法。

默认情况下,Clickstream使用com.opensymphony.clickstream.logger.SimpleClickstreamLogger 这个类来处理日志。这个logger只能向Jakarta的Commons Logging 工具发送一个INFO日志声明,Commons Logging可以依次通知多个日志provider,包括log4j

可以通过创建一个clickstream.xml配置文件并且把它放在你应用程序的类路径中(通常是[web应用程序根目录]/WEB-INF/classes)来改变这种默认的行为。配置文件可能是如下的形式:

<clickstream>
      <!-- there can only be one logger -->
      <logger class="com.opensymphony.clickstream.logger.SimpleClickstreamLogger"/>

      <!-- there can be zero or more bot-hosts -->
      <bot-host name="someBotHost"/>

      <!-- there can be zero or more bot-agents -->
      <bot-agent name="someBotAgent"/>
</clickstream>



如果你希望提供你自己的logger,请查看Clickstream 的javadoc文档

和容器有关的特定问题

当从控制台停止Clickstream应用程序时,BEA WebLogic 8.1 (SP2)会抛出NullPointerException异常(when setting the attribute NULL for the clickstreams in the ServletContext on contextDestroyed—这句话不会翻译,谁能帮帮忙 ),需要应用CR133558这个补丁(已经包含在weblogic的sp3中)。

外部文档
使用EAServer跟踪你的用户 —Berndt Hamboeck所著的Sybase白皮书
Servlet2.3 模型的过滤器代码 —Jason Hunter所著的“谁在你的站点上,他们正在干什么”的一段。

by hitdemo2002

分享到:
评论

相关推荐

    大型网站用户行为记录的一个实现--基于clickStream(第二部分)

    在这个主题中,我们将深入探讨如何在大型网站环境中实现用户行为记录,特别是利用clickStream技术。clickStream是指用户在网站上的点击流数据,它记录了用户在页面间跳转、交互的详细路径。这种数据对于理解用户习惯...

    大型网站用户行为记录的一个实现--基于clickStream(第一部分)

    "大型网站用户行为记录的一个实现--基于clickStream(第一部分)"这篇博客探讨了如何利用clickStream技术来实现这一目标。clickStream是一种追踪用户在网站上点击行为的技术,它能够捕获用户从一个页面到另一个页面的...

    clickstream-1.0.2.jar

    clickstream-1.0.2.jar

    myoa.rar_基于clickstream

    【标题】"myoa.rar_基于clickstream" 指的是一个使用Clickstream技术实现的大型网站用户行为记录系统。Clickstream技术主要用于收集、分析和理解用户在网站上的浏览路径和交互行为,这对于网站优化、用户体验提升...

    大数据Spark技术 使用Apache Spark预测Messy Clickstream数据中的安装程序保留共34页.pdf

    总结以上知识点,文章详细讨论了在大数据环境下,如何利用Apache Spark技术来解决Messy Clickstream数据带来的挑战,并专注于构建机器学习模型预测用户留存率的问题。这要求有强大的特征工程能力,以及对Spark等...

    clickstream-rest-proxy

    Clickstream数据是指用户在浏览网站时产生的点击行为序列,这些数据对于理解用户行为、优化用户体验以及进行数据分析至关重要。这个项目的核心是构建一个中间层,它可以接收来自客户端的clickstream事件,通过REST...

    Python库 | streammachine-schemas-clickstream-avro-0.2.0.tar.gz

    综上所述,streammachine-schemas-clickstream-avro-0.2.0.tar.gz是一个专注于clickstream数据处理的Python库,利用Avro进行数据序列化,并提供了流处理能力。它对于需要分析用户行为、构建实时数据分析系统的开发者...

    clickstream:学士论文项目

    用户服务职责范围创建新用户提供用于用户身份验证的数据管理用户个人资料数据(CRUD) 介面Service.CreateUser Service.AuthUser Service.GetUser Service.UpdateUser Service.DestroyUser 依存关系鲁鲁姆应用服务...

    clickstream_analyzer:一个基于决策树分析和预测网站点击活动的机器学习项目

    在现代互联网时代,网站用户的行为数据,特别是点击流(clickstream)数据,已成为评估用户体验、优化网站设计和进行精准营销的重要依据。`clickstream_analyzer`项目正是这样一个专注于这方面分析的工具,它运用了...

    ClickstreamAnalysis:使用马尔可夫链和数据挖掘SPACE算法分析Clickstream数据

    此R代码是使用Markov链和数据挖掘SPADE算法分析Clickstream数据的示例。 您可以在此处找到整个分析: : 用法 我使用了R版本3.3.3(2017-03-06)-“另一个独木舟” 代码中提到了所有需要的软件包。 您只需要将...

    elasticsearch-clickstream-demo

    本项目"elasticsearch-clickstream-demo"是一个基于Python的示例,用于...通过深入学习和实践"elasticsearch-clickstream-demo"项目,你可以掌握如何利用Elasticsearch处理和分析点击流数据,为业务决策提供有力支持。

    电子商务点击流和交易数据集 E-commerce Clickstream and Transaction 70K+ 记录 CSV

    该数据集为电子商务平台上的用户交互提供模拟数据。它包括一系列事件,例如页面浏览量、点击量、产品浏览量和购买量。每条记录都捕获会话中的用户活动,因此适用于分析点击流路径和事务序列。 特征: 用户 ID:每...

    StatViz: graphical clickstream analysis-开源

    这种跟踪方式可以帮助识别特定用户的行为模式,例如他们在哪个时间段活跃,对哪些内容特别感兴趣,以及他们是否完成了预定的目标(如购买、注册等)。这些信息对于个性化营销策略和改进用户体验非常有价值。 ...

    2013年中国数据库大会-44-云端漫步——利用Amazon AWS构建可伸缩的数据分析平台

    数据来源方面,主要来自于Web服务器的点击流(Clickstream)和定制的收集服务器(CollectServer)跟踪信息。兰亭集势对于数据处理的需求特点包括集群规模不大,集群使用不饱和,以及需要较大的计算弹性,这些特点...

    click_stream

    了解 Elixir 中的 。 您可以阅读有关博客文章的。 该项目创建一个 ...iex &gt; stream = ClickStream . create_stream_x # Function iex &gt; stream |&gt; Stream . filter ( fn x -&gt; x &lt; 100&gt; Enum . take 10 x: 376 x

    clickstreamresultoutput.zip

    通过对clickstream数据的深入挖掘,我们可以识别用户行为模式,发现潜在的商业机会,甚至预测未来的趋势,从而为企业决策提供有力支持。 总之,"clickstreamresultoutput.zip"提供的点击流日志数据结合Hadoop技术,...

    quickstart-ct-clickstream-analytics:AWS快速入门团队

    quickstart-clickstream-analytics-ct AWS云上的Clickstream Analytics 此《快速入门》会在大约30分钟内自动在Amazon Web Services(AWS)上构建点击流分析解决方案。 它集成了AWS服务,例如Amazon Kinesis Data ...

    数据分析框架标准建设.pdf

    - **Clickstream Data**:点击流数据记录用户的浏览路径,包括直接输入URL的数量、访客来源和地理位置,这些信息可用来分析用户的行为模式和导航习惯。 - **Outcomes Data**:结果型数据关注用户行为的最终结果...

    AffinityAnalysis:R 代码对 ClickStream 数据进行一些亲和性分析

    R 代码对 ClickStream 数据进行一些亲和性分析。 需要基本 R 包中没有的三个包( arules 、 arulesViz 、 Rgraphviz ); 我不使用require因为我已经安装了它们。 用法 在R端子, source的文件,然后使用上的交易...

Global site tag (gtag.js) - Google Analytics