关于计数器IP问题(在线等待)
请问计数器中怎样防止刷新来更新计数值?现在的代码如下:
<%@ page contentType="text/html;charset=gb2312"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器
</TITLE>
</HEAD>
<BODY>
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
<%
String oldip,nowip,txtPath;
nowip=Request.ServerVariables("REMOTE_ADDR");
oldip=request.cookies("IPAddress");
if (nowip<>oldip) then
{
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
}
%>
您是第<font color="red"><b><%=count%></b></font>位访问者
</BODY>
</HTML>
问题点数:20、回复次数:16Top
1 楼zhaoweiemail(剑心)回复于 2002-07-19 21:57:50 得分 15
第一次给计数器加一,然后把用户的IP存到session中,当用户刷新时,你判断session中是否已经有用户的IP,有就不用对计数器加一了,没有就加一。Top
2 楼blueice2002(蓝冰)回复于 2002-07-19 22:03:24 得分 0
问题是怎样利用session啊?请帮忙!!Top
3 楼zhaoweiemail(剑心)回复于 2002-07-19 22:09:36 得分 0
String userIp=(String)session.getValue("userIp");
if(userIp==null){
给计数器加一;
String userIp=request.getRemoteAddr();
session.putValue("userIp",userIp);
}
这样就可以了。Top
4 楼blueice2002(蓝冰)回复于 2002-07-19 22:17:13 得分 0
就是这一段代码啊,我应该加在什么地方?
<%@ page contentType="text/html;charset=gb2312"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
<%
String txtPath;
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
%>
您是第<font color="red"><b><%=count%></b></font>位访问者
</BODY>
</HTML>Top
5 楼zhaoweiemail(剑心)回复于 2002-07-19 22:20:52 得分 0
你按下面的写就行了。
<%@ page contentType="text/html;charset=gb2312"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
<%
String userIp=(String)session.getValue("userIp");
if(userIp==null){
String txtPath;
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
String userIp=request.getRemoteAddr();
session.putValue("userIp",userIp);
}
%>
您是第<font color="red"><b><%=count%></b></font>位访问者
</BODY>
</HTML>
Top
6 楼blueice2002(蓝冰)回复于 2002-07-19 22:24:58 得分 0
怎么不行啊,错误如下:
500 Servlet Exception
/CODE/CHAPTER7/COUNTER.JSP:28: 输入字符无效。
session.putValue("userIp",userIp);
^
/CODE/CHAPTER7/COUNTER.JSP:28: 输入字符无效。
session.putValue("userIp",userIp);
^
2 个错误
--------------------------------------------------------------------------------
Resin 2.1.0 (built Tue Mar 26 14:12:50 PST 2002)Top
7 楼zhaoweiemail(剑心)回复于 2002-07-19 22:30:04 得分 0
我写的语句是oracle ias的你把session.putValue("userIp",userIp);改成
session.setAttribute("userIp",userIp)试一试Top
8 楼blueice2002(蓝冰)回复于 2002-07-19 22:31:35 得分 0
不行:
500 Servlet Exception
/CODE/CHAPTER7/COUNTER.JSP:28: 输入字符无效。
session.setAttribute("userIp",userIp)
^
/CODE/CHAPTER7/COUNTER.JSP:28: 输入字符无效。
session.setAttribute("userIp",userIp)
^
/CODE/CHAPTER7/COUNTER.JSP:28: 需要 ';'。
session.setAttribute("userIp",userIp)
^
3 个错误
--------------------------------------------------------------------------------
Resin 2.1.0 (built Tue Mar 26 14:12:50 PST 2002)Top
9 楼zhaoweiemail(剑心)回复于 2002-07-19 22:35:48 得分 0
你使用的服务器是Resin 2.1.0,这个服务器我没有使用过,你查一查Resin 2.1.0的session的操作,把字符串存进session中。Top
10 楼blueice2002(蓝冰)回复于 2002-07-19 22:38:17 得分 0
好吧,谢谢你啊!!
到时问题解决了一定给分!Top
11 楼zhaoweiemail(剑心)回复于 2002-07-19 22:39:09 得分 0
不客气。Top
12 楼maxpain(我是新新新新新来的呀)回复于 2002-07-19 23:18:55 得分 5
session.setAttribute("userip",request.getRemoteAddr);
这样应该是可以的。
但是这样作不是个好办法,你可以使用application对象阿。这样可以得到记数,还可以得到在在线人数。Top
13 楼blueice2002(蓝冰)回复于 2002-07-20 09:54:59 得分 0
问题是怎样利用application对象啊?请帮忙!!
Top
14 楼blueice2002(蓝冰)回复于 2002-07-20 10:07:45 得分 0
问题已经解决了,正确答案如下:
<%@ page contentType="text/html;charset=gb2312"%>
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<TITLE>
计数器程序
</TITLE>
</HEAD>
<BODY>
<!--创建并调用bean(counter)-->
<jsp:useBean id="counter" class="counter" scope="request">
</jsp:useBean>
<%
String userIp=(String)session.getValue("userip");
if(userIp==null){
String txtPath;
//获取绝对路径
txtPath=request.getRealPath("counter.txt");
//调用counter对象的ReadFile方法来读取文件counter.txt中的计数
String count=counter.ReadFile(txtPath);
//实现同步
synchronized(txtPath)
{
//调用counter对象的ReadFile方法来将计数器加一后写入到文件counter.txt中
counter.WriteFile(txtPath,count);
}
}
session.setAttribute("userip",request.getRemoteAddr());
%>
您是第<font color="red"><b><%@ include file="COUNTER.TXT" %></b></font>位访问者
</BODY>
</HTML>
Top




