防止页面刷新定时刷新间隔刷新.docx
《防止页面刷新定时刷新间隔刷新.docx》由会员分享,可在线阅读,更多相关《防止页面刷新定时刷新间隔刷新.docx(12页珍藏版)》请在冰豆网上搜索。
防止页面刷新定时刷新间隔刷新
来源:
JSP页面不能刷新、防止刷新的问题总结
<1>如果要求当发生选择、删除、修改等操作时,表单刷新,需要加上:
window.returnValue=0.
例如leadership\leader_ctl.jsp
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
<%@ page import="leader.*" %>
<%
LeaderBean leader=new LeaderBean();
String strUserID=request.getParameter("Key");
session.setAttribute("EmployUserID",strUserID);
//System.out.println("strUserID:
"+strUserID);
if (leader.PostEdit(request)){
//System.out.println("me5");
out.println("");
return;
}
else{
if (request.getParameter("Oper")!
=null){
if (request.getParameter("Oper").equals("delLeader")){
out.println("");
//return;
}
if(request.getParameter("Oper").equals("setLeader")){
//System.out.println("me3");
out.println("");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("delCompetence")){
////System.out.println("strUserID:
"+strUserID);
out.println("");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("addCompetence")){
//System.out.println("addCompetence1");
out.println("");
//System.out.println("addCompetence2");
//return;
}
else{
if (request.getParameter("Oper").equals("qx")){
out.println("");
//return;
}
else{
//System.out.println("me6");
out.println("");
//return;
}//3e
}
}
}
%>
<2>如果要求每隔一段时间从服务器上自动刷新,需要加上:
(1) 种方法:
<%response.setHeader("Refresh","15");%>
15妙刷新一次
(2) 种方法:
自动刷新网页
在HTML的与之间加入下面这段代码,则在5分钟之后正在浏览的页面将会自动变为target.html这一页。
代码中300为刷新的延迟时间,以秒为单位。
targer.html为你想转向的目标页,若为本页则为自动刷新本页。
(3) 种方法:
演示效果:
本页将在规定的时间自动刷新,代码提示:
将下面的代码复制到〈head〉区
--
var limit="0:
15"//修改刷新时间
if (document.images){
var parselimit=limit.split(":
")
parselimit=parselimit[0]*60+parselimit[1]*1
}
function beginrefresh(){
if (!
document.images)
return
if (parselimit==1)
window.location.reload()
else{
parselimit-=1
curmin=Math.floor(parselimit/60)
cursec=parselimit%60
if (curmin!
=0)
curtime=curmin+"分"+cursec+"秒后重刷本页!
"
else
curtime=cursec+"秒后重刷本页!
"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
//-->
<2>防止从服务器上自动刷新,需要加上:
<%@ page contentType="text/html;charset=gb2312"%><%@ page language="java" import="java.io.*"%>
计数器<%!
//同步更新计数器 synchronized void counter(){ ServletContext application=getServletContext(); //构造application对象(可选) String szPath=application.getRealPath("/"); //得到当前路径 szPath=szPath+"hits.txt"; //计数器文件 0-9999999999999...
方案2
jJsp计数器,同一电脑10秒内防刷新
<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="" %>
DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http:
//www.w3.org/TR/html4/loose.dtd">
无标题文档--start counter -->
<%@ page import="com.ckj.counter.*,java.io.*,java.util.Date"%>
<%Counter ct=new Counter();
String count="0";
String counterid="0";
try{
// String strDirPath = new File(application.getRealPath(request.getRequestURI())).getParent();
//System.out.println("目录的绝对路径:
" + strDirPath + "
");
String strFullPath = session.getServletContext().getRealPath("/");
System.out.println(strFullPath);
ct.path=strFullPath+"/counter/count.txt";
//1 session存储时间值,
//2 下次比较一下
if(session.getAttribute("counttime")==null ){ //如果 初次访问
count=ct.doCount();
// System.out.println("--------计算前11--------"+System.currentTimeMillis());
session.setAttribute("counttime",String.valueOf(System.currentTimeMillis()));}
else
{ //如果,刷新间隔超过
//System.out.println("--------刷新之差--------"+(System.currentTimeMillis()- Long.valueOf((String)session.getAttribute("counttime")).longValue()));
//大于10秒
if((System.currentTimeMillis()-Long.valueOf((String)session.getAttribute("counttime")).longValue())>9000) {
//System.out.println("--------计算后--------"+System.currentTimeMillis());
count=ct.doCount();
//session.removeAttribute("counttime");
session.setAttribute("counttime",String.valueOf(System.currentTimeMillis()));
}
//小于10秒
else
count=ct.getCount();
}
}catch(Exception e){
}
//如果10秒内刷新,不计数
if(true){
}
%>
你是本站第 <%=count%> 位访问者!
-- end counter -->
方案3、防刷新图形计数器(已调试)
实例6:
防刷新图形计数器(已调试)程序说明:
上次做的计数器没有采用对文件的读写操作,虽然用到了javabean但是并没有用到scope中的几个参数:
appliction,page,session这些参数分别代表了bean的存活的周期,appliction>session>page我们利用这个原理来防止用户刷新从而提高访问次数的漏洞。
程序准备:
如果你使用的是apache+resin那么请你在resin的根目录下建立一个文本文件counter.txt并在里面任意写一个数字,比如100之类的。
其次,请建立一个文件夹用来保存这个程序的所有文件,并在该文件夹里建立一个子目录images,用来保存10张图片,图片格式为gif,图片名称从0--9,图片内容就是0--9十个数字,分别与图片名称对应就可了。
程序文件:
index.jsp, addone.java, display.javaindex.jsp用来显示纪录结果。
addone.java 是一个javabean用来写纪录到文件display.java 也是一个javabean用来读取纪录到index.jsp程序源码:
index.jsp<%@ page import="popeyelin.*" contentType="text/html; charset=gb2312" language="java" %>
JSP图形防刷新计数器useBean id="a" scope="page" class="popeyelin.addone"/>
useBean id="b" scope="page" class="popeyelin.display"/>
已经有
<% b.counter();
for(int i=9;i>=0;i--) out.print(b.img[i]);
%>
个人访问这个页面
addone.java package popeyelin;
import java.io.*;
import java.lang.*;
public class addone{
private String s=new String(); //建立数组变量sl
public void addone(){
try {
BufferedReader buff=new BufferedReader(new FileReader("conuter.txt"));
String s=buff.readLine();
int i=Integer.parseInt(s); //将字符串变量s转化成整形
i++;
buff.close();//关闭对象
PrintWriter pw=new PrintWriter(new FileWriter("oounter.txt"));
String temp=Integer.toString(i);//将整形变量i转化成字符型
pw.print(temp);
pw.close();
}
catch(IOException e){
System.out.println(e.toString());
}
}
} display.java
package popeyelin;
import java.io.*;
import java.lang.*;
public class display{
public String[]img=new String[10];
public void counter(){
try{
BufferedReader buff=new BufferedReader(new FileReader("counter.txt"));
String s=buff.readLine();
int i=Integer.parseInt(s);
int st=10;
int j=0;
while(j<=9) {
img[j]=Integer.toString(i%st);
img[j]=img[j]+".GIF";
img[j]="images/"+img[j];
img[j]="";
img[j]=img[j]+"";
i/=10;
j++;
}
}
catch(IOException e){
System.out.println(e.toString());
}
}
} 编译addone.java和display.java后会生成一个文件夹,popeyelin,把这个文件夹拷贝到WEB-INF/class目录下,如果不存在,请手动建立。
运行index.jsp你就可以看到这个图片计数器了程序分析:
重点就在于对文件的读写,我们看如下代码 BufferedReader buff=new BufferedReader(new FileReader("conuter.txt"));
String s=buff.readLine();
int i=Integer.parseInt(s); //将字符串变量s转化成整形
i++;
buff.close();//关闭对象
PrintWriter pw=new PrintWriter(new FileWriter("oounter.txt"));
String temp=Integer.toString(i);//将整形变量i转化成字符型
pw.print(temp);
pw.close(); 我们如果要对文件进行读写操作,就必须先后建立2个对象,来对文件分别进行读和写而且要注意,我们从文件里读出来的东西是字符串型的,如果我们要对他进行修改必须先转换成int型,要用到 integer.parseint(),如果我们要先东西到文件,同样要先将int转换成string用integer.tostring(),写文件用到pw.print()要写的内容可以保存在变量里,如:
pw.print(temp),也可以直接写,如:
pw.print("hello,world");记住,写完一定要关毕对象。
pw.close()
方案4、用JSP制作页面防刷新计数器(PHP)
<%@ page import="java.io.*" %>
<%
String currentRecord = null;//保存文本的变量
BufferedReader file; //BufferedReader对象,用于读取文件数据
String nameOfTextFile = "e:
\\count.txt";
//读取
file = new BufferedReader(new FileReader(nameOfTextFile));
String readStr =null;
int writeStr =0; //如果计数文本中的计数值为空则让它显示时变成1并写入
try { readStr = file.readLine(); }
catch (IOException e)
{ System.out.println("读取数据错误."); }
if (readStr == null) readStr = "没有任何记录";
//判断cookie,第一次登陆时加1,刷新时不累计计数
else if (request.getHeader("Cookie")==null)
{ writeStr = Integer.parseInt(readStr)+1;}
else { writeStr = Integer.parseInt(readStr);}
//写入时控制因为刷新引起的重复计数
if (request.getHe