Java 页面视图实现
我想在我当前的web应用程序上添加页面浏览功能。此页面视图基于查看页面的用户计数。它必须是唯一的,也就是说,我不能查看一个人的页面10000次并将其记录为10000次查看,只需记录1次查看即可 我的问题是,我应该根据IP地址计算页面浏览量吗?如果不是,那么最好的方法是什么 我知道,如果该用户已登录到我的系统,我可以简单地使用会话中存储的用户id,并检查该用户是否查看了该页面,并相应地进行更新。但对于“匿名”观众来说,最好的方法是什么 谢谢 PSYoutube是如何做到的Java 页面视图实现,java,pageviews,Java,Pageviews,我想在我当前的web应用程序上添加页面浏览功能。此页面视图基于查看页面的用户计数。它必须是唯一的,也就是说,我不能查看一个人的页面10000次并将其记录为10000次查看,只需记录1次查看即可 我的问题是,我应该根据IP地址计算页面浏览量吗?如果不是,那么最好的方法是什么 我知道,如果该用户已登录到我的系统,我可以简单地使用会话中存储的用户id,并检查该用户是否查看了该页面,并相应地进行更新。但对于“匿名”观众来说,最好的方法是什么 谢谢 PSYoutube是如何做到的 在阅读了这里的大部分评
在阅读了这里的大部分评论之后,我仍然不确定提供的解决方案是否会有所帮助。举一个典型的例子:Youtube视频。它们将页面视图存储在永久性存储器中,并确保它不会记录同一用户两次。如果有匿名查看器,它(以某种方式)确保(我知道这不是完全证明,或者是)匿名查看器更新页面视图一次。它可以通过cookie(但若你们删除了它怎么办)或IP地址(但若你们坐在公司防火墙后面,那个就没用了)。有没有其他策略可以最好地帮助这一点
PS特别是对于用户页面浏览(即您的youtube帐户),它可以告诉有多少观众浏览了您的个人资料。这是否有另一种获取页面视图的方法?您可以使用cookie来识别其他用户。有些会禁用cookie或删除cookie,但这会给您带来更好的结果,而且实现起来非常便宜 基于IP的过滤的问题是,很多人都在防火墙后面,并且您可能无法计算单个防火墙后面多个用户的点击次数 您可以创建,将其映射到“/*”。在此筛选器中,您可以存储有关会话中用户的信息:
HttpSession session = request.getSession(true);
Integer ival = (Integer) session.getValue("knownuser");
if (ival==null) {
ival = new Integer(1);
incrementUsersCounter ();
session.putValue("knownuser", ival);
}
也许你可以先从一个完全不同的方向开始:如果你已经在使用Google Analytics(或类似的),你可以使用它的API来获取当前页面的页面视图数据。数据不会完全是最新的,但实现非常简单,可能已经满足了您的需要。JavaServletapi为我们提供了这方面的帮助 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文件我希望它能工作@精英绅士:无论用户是否登录,都会创建会话。这只是cookies(或URL修改)。但是对于匿名查看者,我如何确定查看者是否是唯一的,而不是淹没请求以增加查看者数量?我们已经讨论了大约一个小时了。您最好阅读一些关于servlet、会话(我指的是java中的HttpSession)、过滤器的介绍手册。然后你就可以确定答案了。把所有的课程都列在一个列表中是个好主意吗?我认为这可能不理想?我们可以数一数,而不是整张单子。我同意@女孩,你做的我几个月前就已经做过了。它被称为会话计数器(在我的例子中)。我没有保存一个列表,而是使用了一个
静态long
变量,当创建/销毁会话时,该变量会分别增加/减少1。