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

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所著的“谁在你的站点上,他们正在干什么”的一段。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics