回麻雀苑主页          

3-4使用session实现的计数器

作者:老麻雀 2006/10/22 23:40:55

使用session实现真实的计数器
  在上一章介绍过一个简单计数器,虽然实现了计数功能,但只要一刷新网页,计数器的数值就增加,反映的访问人数不真实。用户是站点的第5位访问者,怎样刷新网页都应还是第5位,即便是他访问了站点的其他网页,又回到计数器所在的网页,计数器仍然显示是第5位,这才是真实的计数器。本范例就使用session的特性,实现这种真实计数器的功能。
一、 范例的演示和代码清单
  演示步骤:
1. 启动JSP引擎后,启动IE,在地址栏键入http://127.0.0.1:8080/ch3/ch3-31.jsp,如图3-12所示:
  
  图 3-12
  
2. 刷新当前网页,会发现计数器的数值不发生变化,多次刷新数值都不发生变化。
3. 这时如果是在局域网上体验范例,再从另外两台计算机访问本机的范例。那两台计算机会显示是“第2位访客”和“第3位访客”,他们刷新网页,计数器的数值也不会发生变化。
4. 访问范例网页的所有计算机(包括本机),点击“返回”,然后再进入本范例网页,计数器仍然是原来的数值。(即便是访问多个其他网页后,再进入本范例网页,计数器也不发生变化。)
5. 此时如果在局域网上有一台计算机点击“注销返回”,然后再进入本范例网页,计算机屏幕上显示是“第4位访客”,其他依次注销,然后再进入本范例网页的计算机,将是“第5位访客”和“第6位访客”。
6. 如果没在局域网上,只在本机上体验范例。每次注销后再进入本范例网页,计数器将自动加一。
  从范例的演示,可以进一步体验到session的魅力和作用。还有一点要说明,session默认的生命周期是1800秒(30分钟),如果在这个时间内,没有再次使用session,他将自动消失。
  下面是范例的代码:
◇-◇-◇-◇-◇-◇  Session计数器  ◇-◇-◇-◇-◇-◇
范例ch3-31jsp
1) <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>
2) <html>
3) <title>Session计数器</title>
4) <body>
5) <p>
6)   <%! int count=0;%> 
7)   <% 
8)  String usercount;            //usercount 用来记录使用者上网时的人数
9)  request.getSession(true);      //建立使用者的 session
10)  if(session.isNew())          //判断使用者的 session是否为新创建的
11)  {
12)   count++;
13)   usercount = String.valueOf(count);   //将数值型数据转换成字符串型数据
14)   session.putValue("usercount",usercount);    //写入session
15)  }
16)  out.print("您是本站的第 <font color=red size=5>");
17)  out.print(session.getValue("usercount"));
18)  out.print(" </font>位访客");
19) %>
20) </p>
21) <p><a href="index.htm">返回</a></p>
22) <p><a href="ch3-32.jsp">注销返回</a></p>
23) </body>
24) </html>

◇-◇-◇-◇-◇-◇  注销Session  ◇-◇-◇-◇-◇-◇
范例ch3-32.jsp
1) <%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql%>
2) <html>
3) <head><title>注销Session</title><style type="text/css">.STYLE2 {color: #0000FF}</style></head>
4) <body>
5)  <% session.invalidate();         //删除session
6)  response.setHeader("Refresh","1;URL=index.htm"); %>
7) <P><img src="img/pass.gif" alt="注销" width="200" height="25"></P>
8) <h2>注销  <span class="STYLE2">当前用户</span> </h2>
9) </body>
10) </html>
二、JSP动态网页的代码分析
  范例ch3-31.jsp的设计思路是,定义一个整型变量用于计数,创建session保存转换成字符串型的计数数值。然后从session中提取数据送到屏幕上显示。而在session创建之后,写入数据之前,要判断session是否为本次运行JSP网页新创建的。如果是新创建的,整型变量加一写入session,从session中提取数据送到屏幕上显示,新用户访问网页,整型变量都加一,因此每个新用户计数器的数据不一样;如果session不是新创建的,则直接从session中提取原有的数据送到屏幕上显示。因此刷新网页时,用户屏幕上显示的数据不会发生变化。
  网页中“注销返回”链接的是ch3-32.jsp网页,他的作用是删除用户的session。所以注销后,再次访问ch3-31.jsp,必然重新创建session,计数器也就发生新的变化。
  相关的代码提示如下:
  Session计数器的代码行:
  在ch3-31.jsp中:
6)   <%! int count=0;%>                     定义整型变量用于计数
7)   <% 
8) String usercount;                          定义字符串行变量以便写入session
9)  request.getSession(true);                   建立用户的 session
10)  if(session.isNew())                    判断用户的 session是否为新创建的
11)  {
12)   count++;                               整型变量加一
13)   usercount = String.valueOf(count);          将数值型数据转换成字符串型数据
14)   session.putValue("usercount",usercount);     写入session
15)  }
16) out.print("您是本站的第 <font color=red size=5>"); 
17)  out.print(session.getValue("usercount"));       从session中提取数据送到屏幕上显示
18)  out.print(" </font>位访客");
  第10行是这个范例重要代码行,他判断本次访问网页的用户session是否是新创建的。
  如果访问网页的是新用户第9行必定为该用户创建一个session,第10行session.isNew()的返回值为True,这样网页就会运行11-15行,整型变量count加一,数值转换成字符串并赋值给usercount,再写入session。然后才能运行16-18行,此时17行从session中提取的数据,是刚刚更新的,屏幕上计数器的数值是新数据。
  如果访问网页的用户是(刷新)重复访问者,第9行不会为该用户创建session,第10行session.isNew()的返回值为False,这样网页就会直接运行16-18行。此时17行从session中提取的数据,是原来的数据。屏幕上的计数器不会发生变化。
  删除session的代码行:
   在ch3-32.jsp中:
5) <% session.invalidate();         //删除session
  删除session的代码行,在本章第一节介绍过,他是JSP默认对象session的一个方法。这里再介绍session对象的另一个方法,前面说过session的默认生命周期是1800秒,而生命周期的长短是可以设定的。设定session生存时间的方法是session.setMaxInactiveInterval(时间),方法中的“时间”用数值表示,单位为秒。
  如果在ch3-31.jsp的第10行之后增加一行代码:
  session.setMaxInactiveInterval(120);
  session的生存时间被改变成120秒,用户访问网页120秒(2分钟)之后,再次访问范例网页时,原来的session已经消失,又会成为新用户,重新创建session,屏幕上计数器就会变成新的数值。

 

 

我也说两句
E-File帐号:用户名: 密码: [注册]
评论:(内容不能超过500字,如果您不填写用户名和密码只能以游客的身份发表评论。)

*评论内容将在30分钟以后显示!
发表须知:
一、用户须严格遵守国家法律和政策,包括但不限于《全国人大常委会关于维护互联网安全的决定》、《信息网络传播权保护条例》等规定,审慎、合法地利用伊妃(E-file)平台发表言论、作品。
二、用户的言论、行为若涉嫌违法或侵权,用户可能被强制承担因该行为直接或间接导致的全部法律责任。依照法律法规规定,伊妃(E-file)运营方有义务提供用户资料,有义务和权利采取删除、屏蔽、断开链接等各种必要措施。
三、伊妃(E-file)中心授权网络法律专业研究服务机构“网络法苑”为用户及客户提供包括免费咨询在内的全方位的法律支持。

 

版权所有:段保珠   电话:64616239   E-mail:dbz@sina.com   京ICP备06044461号
阿酷科技 Arkoo.com 提供底层技术