我想比较一下同一张网页不同的打开方式产生的不同的SESSION进行比较..不知该如何操作..也就是说,我现在要统计一下点击率.但是刷新时也会自动累加,不知该怎么样才能使它点刷新时不自动累加啊...
解决方案 »
- hibernate映射问题
- ssh 中,要同时查寻2个表这么处理,2个表没有直接关系
- 求一个OA系统,用java开发的jsp页面!
- 在JSP中使用frameset的问题,谢谢大家来帮忙。
- 寻找web附件打印解决方案
- 500求助:如何实现jsp页面内打印功能,在线等待!!
- 大家有没有好用的连接池。贡献一下!!!(收到给分)
- 一个关于statement.executeUpdate(sql)的问题
- 评:《JSP编程指南》第二版 [美] Simon Brown 等著
- java.lang.ClassCastException: java.lang.String cannot be cast to com.spring.dao.
- 有一个关于smartupload的问题。望大侠们回答
- java的List问题
<%
int Counter = 0;
// 得到所有的Cookie
Cookie cookies[] = request.getCookies();
if(cookies != null) {
for(int i=0; i<cookies.length; i++) {
if(cookies[i].getName().equals("Counter"))
Counter = Integer.parseInt(cookies[i].getValue()) + 1;
}
}
// 首次登陆,需要创建Cookie ; 以后登陆,需更新Cookie
Cookie c = new Cookie("Counter", ""+Counter);
c.setMaxAge(60*60*24*365); // Cookie 的有效期为 1 年
response.addCookie(c);
%>
<html>
<head>
<title>显示登陆次数</title>
</head>
<body bgcolor="#FFFFFF">
<%
if(Counter == 0) {
out.println("<Script>");
out.println("alert('欢迎首次光临!')");
out.println("</Script>");
}
else {
if (session.isNew())
{}
else
{
String hits = String.valueOf(Counter);
hits = hits.trim();
String strBack;
String strOut;
strBack="";
strOut="";
for (int i=0;i<hits.length();i++)
{
strBack += "<img src=" + hits.charAt(i) + ".gif border=0>";
}
strBack += "</a>\"";
strOut += strBack;
strOut="你是第"+strOut+"个浏览该网页的人";
out.println(strOut);
}
}
%>
</body>
</html>
在网站中经常需要进行在线人数的统计。过去的一般做法是结合登录和退出功能,即当用户输入用户名密码进行登录的时候计数器加1,然后当用户点击退出按钮退出系统的时候计数器减1。这种处理方式存在一些缺点,例如:用户正常登录后,可能会忘记点击退出按钮,而直接关闭浏览器,导致计数器减1的操作没有及时执行;网站上还经常有一些内容是不需要登录就可以访问的,在这种情况下也无法使用上面的方法进行在线人数统计。
我们可以利用Servlet规范中定义的事件监听器(Listener)来解决这个问题,实现更准确的在线人数统计功能。对每一个正在访问的用户,J2EE应用服务器会为其建立一个对应的 HttpSession对象。当一个浏览器第一次访问网站的时候,J2EE应用服务器会新建一个HttpSession对象,并触发 HttpSession创建事件,如果注册了HttpSessionListener事件监听器,则会调用HttpSessionListener事件监听器的sessionCreated方法。相反,当这个浏览器访问结束超时的时候,J2EE应用服务器会销毁相应的HttpSession对象,触发 HttpSession销毁事件,同时调用所注册HttpSessionListener事件监听器的sessionDestroyed方法。
可见,对应于一个用户访问的开始和结束,相应的有sessionCreated方法和sessionDestroyed方法执行。这样,我们只需要在 HttpSessionListener实现类的sessionCreated方法中让计数器加1,在sessionDestroyed方法中让计数器减 1,就轻松实现了网站在线人数的统计功能。
下面就是利用HttpSessionListener实现在线人数统计的一个例子,这个例子已经在中创软件的J2EE应用服务器InforWeb中测试通过。
首先,编写一个简单的计数器,代码如下: 1. package gongfei.cmc.articles.onlinecounter;
2. public class OnlineCounter {
3. private static long online = 0;
4. public static long getOnline() {
5. return online;
6. }
7. public static void raise(){
8. online++;
9. }
10. public static void reduce(){
11. online--;
12. }
13. }
然后,编写HttpSessionListener实现类,在这个实现类的sessionCreated方法中调用OnlineCounter的raise方法,在sessionDestroyed方法中调用OnlineCounter的reduce方法,代码如下: 1. package gongfei.cmc.articles.onlinecounter;
2. import javax.servlet.http.HttpSessionEvent;
3. import javax.servlet.http.HttpSessionListener;
4. public class OnlineCounterListener implements HttpSessionListener {
5. public void sessionCreated(HttpSessionEvent hse) {
6. OnlineCounter.raise();
7. }
8. public void sessionDestroyed(HttpSessionEvent hse) {
9. OnlineCounter.reduce();
10. }
11. }
再然后,把这个HttpSessionListener实现类注册到网站应用中,也就是在网站应用的web.xml中加入如下内容: 1. <web-app>
2. ……
3. <listener>
4. <listener-class>
5. gongfei.cmc.articles.example.OnlineCounterListener
6. </listener-class>
7. </listener>
8. ……
9. </web-app>