网页浏览实施

时间:2010-03-17 10:55:03

标签: java pageviews

我想在我当前的网络应用程序中添加一个综合浏览功能。此页面视图基于查看页面的用户数。它必须是唯一的,即我不能查看一个人的页面10000次并将其记录为10000个视图,而只记录1个视图。

我的问题是,我应该将我的网页浏览量计入IP地址吗?如果不是,那么这样做的最佳方法是什么?

我知道如果此人已登录我的系统,我可以简单地使用存储在会话中的用户ID,并检查记录,如果用户已经/未查看该页面并相应地更新。但对于“匿名”观众来说,最好的方法是什么?

感谢。

PS Youtube是如何做到的?


在阅读了大部分评论后,我仍然不确定所提供的解决方案是否有帮助。举一个典型的例子:Youtube视频。它们将页面视图存储在持久存储中,并确保它不会两次记录同一用户。如果有匿名观众,它(以某种方式)确保(我知道它不是完全证明,或者是它)匿名查看器更新一次网页浏览计数。它可以通过cookie(但如果你删除它)或通过IP地址(但如果你坐在公司防火墙后面没有帮助)。还有其他策略可以最好地帮助解决这个问题吗?

PS 特别是对于用户综合浏览量(即您的YouTube帐户),它可以告知有多少观看者查看了您的个人资料。这有另一种获取网页浏览的方法吗?

4 个答案:

答案 0 :(得分:1)

您可以使用Cookie来识别匿名用户。有些人会禁用cookie或删除它们,但它会给你一个更好的结果并且实施起来相当便宜。

基于IP的过滤问题是很多人都在防火墙后面,你可能无法计算单个防火墙后面的多个用户的点击量。

答案 1 :(得分:1)

您可以创建filter,将其映射到“/ *”。在此过滤器中,您可以在会话中存储有关用户的信息:

 HttpSession session = request.getSession(true);

 Integer ival = (Integer) session.getValue("knownuser");
 if (ival==null) {
     ival = new Integer(1);
     incrementUsersCounter ();
     session.putValue("knownuser", ival);
 }

答案 2 :(得分:1)

也许您可以先开始寻找完全不同的方向:如果您已经在使用Google Analytics(或类似版本),您可以使用它的API来获取当前页面的网页浏览数据。数据不是完全最新的,但实现非常简单,可能已经完成了您的需要。

答案 3 :(得分:0)

JAVA SERVLET api就此事向我们提供了帮助 sessionCreated(HttpSessionEvent se)和sessionDestroyed(HttpSessionEvent se)。这些方法将被称为创建新会话的通知,并且会话将分别被销毁。 让我们有servlet代码如下

03.import javax.servlet.http.HttpSessionEvent;
04.import javax.servlet.http.HttpSessionListener;
05.import javax.servlet.http.HttpSession;
06.import java.util.List;
07.import java.util.ArrayList;
08. 
09.public class SessionCounter implements HttpSessionListener
10.{
11.    private List sessions = new ArrayList();
12. 
13.    public SessionCounter()
14.    {
15.    }
16. 
17.    public void sessionCreated(HttpSessionEvent event)
18.    {
19.        HttpSession session = event.getSession();
20.        sessions.add(session.getId());
21. 
22.        session.setAttribute("counter", this);
23.    }
24. 
25.    public void sessionDestroyed(HttpSessionEvent event)
26.    {
27.        HttpSession session = event.getSession();
28.        sessions.remove(session.getId());
29. 
30.        session.setAttribute("counter", this);
31.    }
32. 
33.    public int getActiveSessionNumber()
34.    {
35.        return sessions.size();
36.    }
37.}

显示我们将拥有JSP页面的用户数量如下

<html>
<head>
    <title>Session Counter</title>
</head>

<body>
<%
    SessionCounter counter = (SessionCounter) session
            .getAttribute("counter");
%>
Number of online user(s): <%= counter.getActiveSessionNumber() %>
</body>
</html>

设置web.xml文件我希望它能正常工作