使用session实现的计数器

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用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,他将自动消失。

下面是范例的代码:

范例ch3-31jsp

1)<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" %>

2)

3)Session计数器

4)

5)

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("您是本站的第");

17)out.print(session.getValue("usercount"));

18)out.print(" 位访客");

19)%>

20)

21)

返回

22)

注销返回

23)

24)

范例ch3-32.jsp

1)<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql%>

2)

3)注销Session

4)

5)<% session.invalidate(); //删除session

6)response.setHeader("Refresh","1;URL=index.htm"); %>

7)

注销

8)

注销当前用户

9)

10)

二、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("您是本站的第");

17)out.print(session.getValue("usercount")); 从session中提取数据送到屏幕上显示

18)out.print(" 位访客");

第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,屏幕上计数器就会变成新的数值。

相关文档
最新文档