`
lion222
  • 浏览: 125199 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

clickstream跟踪分析浏览者痕迹

阅读更多

项目主页:http://www.opensymphony.com/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里面:

 

  1. <filter>  
  2.     <filter-name>clickstream</filter-name>  
  3.     <filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>  
  4. </filter>  
  5.   
  6. <filter-mapping>  
  7.     <filter-name>clickstream</filter-name>  
  8.     <url-pattern>*.jsp</url-pattern>  
  9. </filter-mapping>  
  10.   
  11. <filter-mapping>  
  12.     <filter-name>clickstream</filter-name>  
  13.     <url-pattern>*.html</url-pattern>  
  14. </filter-mapping>  
  15.   
  16. <listener>  
  17. <listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>  
  18. </listener>  

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

  1. <?xml version="1.0" encoding="ISO-8859-1" ?>   
  2.   <!DOCTYPE web-app (View Source for full doctype...)>   
  3.   <web-app>  
  4.   <display-name>Opensymphony Clickstream Example</display-name>   
  5.   <filter>  
  6.     <filter-name>clickstream</filter-name>   
  7.     <filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>   
  8.   </filter>  
  9.   <filter-mapping>  
  10.     <filter-name>clickstream</filter-name>   
  11.     <url-pattern>/*</url-pattern>   
  12.   </filter-mapping>  
  13.   
  14.   <listener>  
  15.     <listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>  
  16.   </listener>  
  17.   </web-app>  

你可以利用clickstreams.jsp

  1. <%@ page import="java.util.*,  
  2.                  com.opensymphony.clickstream.Clickstream" %>  
  3.   
  4. <%  
  5.     Map clickstreams = (Map) application.getAttribute("clickstreams");  
  6.   
  7.     String showbots = "false";  
  8.     if ("true".equalsIgnoreCase(request.getParameter("showbots")))  
  9.         showbots = "true";  
  10.     else if ("both".equalsIgnoreCase(request.getParameter("showbots")))  
  11.         showbots = "both";  
  12. %>  
  13. <html>  
  14.     <head>  
  15.         <title>All Clickstreams</title>  
  16.     </head>  
  17.       
  18.     <body>  
  19.         <h1>All Clickstreams</h1>  
  20.   
  21.         <a href="?showbots=false">No Bots</a> |  
  22.         <a href="?showbots=true">All Bots</a> |  
  23.         <a href="?showbots=both">Both</a>  
  24.           
  25.         <p>          
  26.         <% if (clickstreams.isEmpty()) { %>  
  27.            No clickstreams in progress.  
  28.         <% } else {  
  29.             synchronized(clickstreams) {  
  30.                 Iterator it = clickstreams.keySet().iterator();  
  31.                 int count = 0;  
  32.                 while (it.hasNext())  
  33.                 {  
  34.                     String key = (String)it.next();  
  35.                     Clickstream stream = (Clickstream)clickstreams.get(key);  
  36.   
  37.                     if (showbots.equals("false") && stream.isBot())  
  38.                     {  
  39.                         continue;  
  40.                     }  
  41.                     else if (showbots.equals("true") && !stream.isBot())  
  42.                     {  
  43.                         continue;  
  44.                     }  
  45.   
  46.                     count++;  
  47.                     try {  
  48.                 %>  
  49.                 <%= count %>. <a href="viewstream.jsp?sid=<%= key %>"><b><%= (stream.getHostname() != null &&    
  50. !stream.getHostname().equals("") ? stream.getHostname() : "Stream") %></b></a> <font size="-1">[<%= stream.getStream().size()    
  51. %> reqs]</font><br>  
  52.                 <%  
  53.                     }  
  54.                     catch (Exception e)  
  55.                     {  
  56.                 %>  
  57.                     An error occurred - <%= e %><br>  
  58.                 <%  
  59.                     }  
  60.                 }  
  61.             }  
  62.         }  
  63.         %>  
  64.         </p>  
  65.     </body>  
  66. </html>  

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

 

 

 

  1. <%@ page import="java.util.*,  
  2.                  com.opensymphony.clickstream.Clickstream,  
  3.                  com.opensymphony.clickstream.ClickstreamRequest" %>  
  4.   
  5. <%  
  6. if (request.getParameter("sid") == null)  
  7. {  
  8.    response.sendRedirect("clickstreams.jsp");  
  9.    return;  
  10. }  
  11.   
  12. Map clickstreams = (Map)application.getAttribute("clickstreams");  
  13.   
  14. Clickstream stream = null;  
  15.   
  16. if (clickstreams.get(request.getParameter("sid")) != null)  
  17. {  
  18.    stream = (Clickstream)clickstreams.get(request.getParameter("sid"));  
  19. }  
  20.   
  21. if (stream == null)  
  22. {  
  23.    response.sendRedirect("clickstreams.jsp");  
  24.    return;  
  25. }  
  26. %>  
  27.   
  28. <html>  
  29.     <head>  
  30.         <title>Clickstream for <%= stream.getHostname() %></title>  
  31.     </head>  
  32.       
  33.     <body>  
  34.         <div align="right"><a href="clickstreams.jsp">All streams</a></div>  
  35.   
  36.         <h1>Clickstream for <%= stream.getHostname() %></h1>  
  37.   
  38.         <b>Initial Referrer</b>: <a href="<%= stream.getInitialReferrer() %>"><%= stream.getInitialReferrer() %></a><br>  
  39.         <b>Hostname</b>: <%= stream.getHostname() %><br>  
  40.         <b>Session ID</b>: <%= request.getParameter("sid") %><br>  
  41.         <b>Bot</b>: <%= stream.isBot() ? "Yes" : "No" %><br>  
  42.         <b>Stream Start</b>: <%= stream.getStart() %><br>  
  43.         <b>Last Request</b>: <%= stream.getLastRequest() %><br>  
  44.           
  45.         <% long streamLength = stream.getLastRequest().getTime() - stream.getStart().getTime(); %>  
  46.         <b>Session Length</b>:  
  47.            <%= (streamLength > 3600000 ?  
  48.              " " + (streamLength / 3600000) + " hours" : "") +  
  49.            (streamLength > 60000 ?  
  50.              " " + ((streamLength / 60000) % 60) + " minutes" : "") +  
  51.            (streamLength > 1000 ?  
  52.              " " + ((streamLength / 1000) % 60) + " seconds" : "") %><br>  
  53.           
  54.         <b># of Requests</b>: <%= stream.getStream().size() %>  
  55.           
  56.         <p><b>Click stream</b>:</p>  
  57.           
  58.         <table border="0" cellpadding="2">  
  59.         <%  
  60.         synchronized(stream) {  
  61.             Iterator clickstreamIt = stream.getStream().iterator();  
  62.   
  63.             int count = 0;  
  64.             while (clickstreamIt.hasNext())  
  65.             {  
  66.                 count++;  
  67.                 String click = ((ClickstreamRequest)clickstreamIt.next()).toString();  
  68.             %>  
  69.             <tr><td><%= count %>:</td><td><a href="http://<%= click %>"><%= click %></a></td></tr>  
  70.             <%  
  71.             }  
  72.         }  
  73.         %>  
  74.         </table>  
  75.     </body>  
  76. </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)来改变这种默认的行为。配置文件可能是如下的形式:

 

 

  1. <clickstream>  
  2.     <!-- there can only be one logger -->  
  3.     <logger class="com.opensymphony.clickstream.logger.SimpleClickstreamLogger"/>  
  4.   
  5.     <!-- there can be zero or more bot-hosts -->  
  6.     <bot-host name="someBotHost"/>  
  7.   
  8.     <!-- there can be zero or more bot-agents -->  
  9.     <bot-agent name="someBotAgent"/>  
  10. </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所著的“谁在你的站点上,他们正在干什么”的一段。

分享到:
评论

相关推荐

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

    这可能是用某种编程语言(如Python、Java或JavaScript)编写的数据处理脚本,以及用于处理和分析clickStream数据的工具,如Hadoop、Spark或者NoSQL数据库。 【压缩包子文件的文件名称列表】:“log2db”暗示了一个...

    clickstream-1.0.2.jar

    clickstream-1.0.2.jar

    myoa.rar_基于clickstream

    总的来说,"myoa.rar_基于clickstream" 提供了一个实践clickstream分析的平台,对理解用户行为、优化网站及制定营销策略具有重要价值,但同时也需要开发者具备一定的技术背景和解决实际问题的能力。

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

    clickStream是一种追踪用户在网站上点击行为的技术,它能够捕获用户从一个页面到另一个页面的完整路径,从而为数据分析提供宝贵的信息。 首先,我们需要理解clickStream的基本概念。clickStream数据包括用户在网站...

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

    `clickstream_analyzer`项目正是这样一个专注于这方面分析的工具,它运用了机器学习中的决策树算法,旨在揭示用户在网站上的行为模式,从而帮助开发者和分析师更好地理解用户行为并作出相应的策略调整。 一、项目...

    clickstream-rest-proxy

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

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

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

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

    4. **集成性**:作为Python库,streammachine-schemas-clickstream-avro可能与其他Python数据分析和处理框架如Pandas、Numpy、Scikit-learn等有良好的集成,方便数据科学家和开发人员在Python环境中进行工作。...

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

    根据提供的文件信息,文章主要讲述的是使用大数据Spark技术对Messy Clickstream数据进行分析和预测的过程,特别聚焦于如何预测安装程序中的用户保留情况。下面将详细阐述文章中涉及的知识点: 1. Apache Spark技术...

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

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

    clickstream:学士论文项目

    点击流分析平台,用于用户活动数据目录1.11.22.12.2 2.32.4代2.52.62.7服务沟通API网关使用REST-API服务客户端请求使用gRPC客户端与微服务通信微服务使用gRPC与不同的服务进行通信API服务职责范围REST API 满足所有...

    elasticsearch-clickstream-demo

    本项目"elasticsearch-clickstream-demo"是一个基于Python的示例,用于展示如何使用Elasticsearch处理和分析点击流数据。点击流数据是用户在网站上浏览时产生的序列化记录,包括用户访问的页面、时间戳和其他相关...

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

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

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

    quickstart-clickstream-analytics-ct AWS云上的Clickstream Analytics ... Web使用情况指标的近实时可视化,例如每小时事件,访问者人数和引荐来源。 它还使您能够使用Amazon Redshift应用程序编程接口(A

    基于AWS和Apache Kylin实现数据分析服务.pptx

    Strikingly Analytics是这个解决方案的核心部分,它提供了访问者流(ClickStream)分析,服务于使用Strikingly/上线了建站和发布微信小程序的客户。这个工具实现了多维分析,支持商业智能(BI)决策,使得用户可以轻松...

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

    每条记录都捕获会话中的用户活动,因此适用于分析点击流路径和事务序列。 特征: 用户 ID:每个用户的唯一标识符。 SessionID:每个会话的唯一标识符。 时间戳:交互的日期和时间。 EventType:事件类型(例如,...

    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

Global site tag (gtag.js) - Google Analytics