张继军 董卫 《java web 应用开发技术与实案列教程》课后习题之第三章第7题
题目内容:7.分别设计网页访问计数器,会话计数器,访问网站计数器。
分别设计为count1.jsp、count2.jsp、count3.jsp。
网页访问计数器count1.jsp
application对象:所有访问同一网站的用户,都有一个相同的application对象,除非关闭服务器,application对象中设置的属性才会被收回。也就是说刷新一次页面、关闭浏览器再打开、用其他浏览器打开application对象中设置的属性都会一直存在,可以用来计算当前页面访问的次数。
<%
Integer count = (Integer) application.getAttribute("count");
if (count == null) {
count = 0;
}
application.setAttribute("count", count + 1);
%>
欢迎!您是第<%=count%>个访问用户。
运行结果
分别用eclipse内置运行环境运行后(多次刷新后),再转用谷歌开打(打开+刷新,次数均会+1)结果如下:
会话计数器count2.jsp
session对象:从进入网站到关闭所经过的过程才是一次会话,第一次进去是0,关闭之后才会进行+1操作,即在下一次打开网站时才会显示上一次增加次数,所以i=1开始计数 。这里运用session.new()判断是否是新的会话。那么在当前页面刷新就不会进行+1操作了。用其他浏览器打开才会进行+1操作,关闭浏览器再重新打开算一次新的会话。
<%!int i = 1;%> <!-- session对象打开到关闭才算一次会话,所以提前从i=1计数 -->
<%
if (session.isNew()) { //判断是否是一个新的会话
i++;
}
application.setAttribute("count", i);
Integer count = (Integer) application.getAttribute("count");
%>
欢迎!您是第<%=i%>个访问用户
运行结果
eclipse运行结果如下:
转用谷歌打开第一次,然后关闭再打开第二次,结果如下:
当然,好奇心也会驱使我回eclipse关掉再运行看看结果会怎么样,结果还是3。这样该是eclipse本身的原因。就是说即使你把eclipse的运行窗口关掉再打开,应该不算是把eclipse内置浏览器运行环境给关掉了。因为当你把谷歌关闭再打开运行次数变成4
的时候,回到eclipse刷新下就会发现也变成了4
。这应该是足以证明我刚刚的结论。学习,就是不断折腾
的过程!嘿嘿。
访问网站访问计数器count3.jsp
访问网站计数器,唉?这不是跟上一个会话计数器原理差不多的嘛。都需要通过session.new()来控制的吧。仔细想想,这主要还得看怎么定义的,刷新页面、不同浏览器打开、同一用户同一主机MAC地址,或者在一时间段内多次打开等等都能作为是否增加次数的标准吧。照搬课本例题,话说功能是“统计网站访问人数及其当前在线人数”,但我似乎看不出来如何统计在线人数的…不过课本<title>
标签内就是这么写的呀! /狗头保命
<%! Integer yourNumber=new Integer(0);%>
<%
if(session.isNew()){
Integer number=(Integer)application.getAttribute("count");
if(number==null) //如果是第一个访问本站
{number=new Integer(1);}
else
{number=new Integer(number.intValue()+1);}
application.setAttribute("count", number);
yourNumber=(Integer)application.getAttribute("count");
}
%>
欢迎访问本站,您是第<%=yourNumber %>个访问用户。
运行结果
emmm,其实跟上一个会话计数器效果差不多的。