<1>如果要求當發生(shēng)選擇、删除、修改等操作時,表單刷新,需要加上: window.returnValue=0.
例如leadership\leader_ctl.jsp
<body leftmargin="0" topmargin="0" >
<%@ 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("<script>window.returnValue=0;window.close();</script>");
return;
}
else{
if (request.getParameter("Oper")!=null){
if (request.getParameter("Oper").equals("delLeader")){
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;</script>");
//return;
}
if(request.getParameter("Oper").equals("setLeader")){
//System.out.println("me3");
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;window.close();</script>");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("delCompetence")){
////System.out.println("strUserID:"+strUserID);
out.println("<script>alert('"+leader.LastOperMsg+"');history.back();</script>");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("addCompetence")){
//System.out.println("addCompetence1");
out.println("<script>alert('"+leader.LastOperMsg+"');history.back();</script>");
//System.out.println("addCompetence2");
//return;
}
else{
if (request.getParameter("Oper").equals("qx")){
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;window.close();</script>");
//return;
}
else{
//System.out.println("me6");
out.println("<script>alert('"+leader.LastOperMsg+"');window.close();</script>");
//return;
}//3e
}
}
}
%>
<2>如果要求每隔一(yī)段時間從服務器上自動刷新,需要加上:
(1) 種方法:
<%response.setHeader("Refresh","15");%>
15妙刷新一(yī)次
(2) 種方法:
自動刷新網頁
在HTML的與之間加入下(xià)面這段代碼,則在5分(fēn)鍾之後正在浏覽的頁面将會自動變爲target.html這一(yī)頁。代碼中(zhōng)300爲刷新的延遲時間,以秒爲單位。targer.html爲你想轉向的目标頁,若爲本頁則爲自動刷新本頁。
<meta http-equiv="refresh" content="300; url=target.html">
(3) 種方法:演示效果:本頁将在規定的時間自動刷新,代碼提示:将下(xià)面的代碼複制到〈head〉區
<script>
<!--
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+"分(fēn)"+cursec+"秒後重刷本頁!"
else
curtime=cursec+"秒後重刷本頁!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
//-->
</script>
<2>防止從服務器上自動刷新,需要加上:
<%@ page contentType="text/html;charset=gb2312"%><%@ page language="java" import="java.io.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>計數器</title></head>
<%!//同步更新計數器
synchronized void counter()
{
ServletContext application=getServletContext();
//構造application對象(可選)
String szPath=application.getRealPath("/");
//得到當前路徑
szPath=szPath+"hits.txt";
//計數器文件 0-9999999999999...
方案2
jJsp計數器,同一(yī)電腦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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" http-equiv="refresh" >
<title>無标題文檔</title>
<link href="css/counter.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<!--start counter -->
<div align="center">
<%@ 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 + "<br/>");
String strFullPath = session.getServletContext().getRealPath("/");
System.out.println(strFullPath);
ct.path=strFullPath+"/counter/count.txt";
//1 session存儲時間值,
//2 下(xià)次比較一(yī)下(xià)
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()));
//大(dà)于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()));
}
//小(xiǎo)于10秒
else
count=ct.getCount();
}
}
catch(Exception e)
{
}
//如果10秒内刷新,不計數
if(true){
}
%>
你是本站第 <span class="font12bgred" > <%=count%> </span> 位訪問者!
<!-- end counter -->
</div>
</body>
</html>
方案3、防刷新圖形計數器(已調試)
實例6:防刷新圖形計數器(已調試)程序說明:上次做的計數器沒有采用對文件的讀寫操作,雖然用到了javabean但是并沒有用到scope中(zhōng)的幾個參數:appliction,page,session這些參數分(fēn)别代表了bean的存活的周期,appliction>session>page我(wǒ)(wǒ)們利用這個原理來防止用戶刷新從而提高訪問次數的漏洞。程序準備:如果你使用的是apache+resin那麽請你在resin的根目錄下(xià)建立一(yī)個文本文件counter.txt并在裏面任意寫一(yī)個數字,比如100之類的。其次,請建立一(yī)個文件夾用來保存這個程序的所有文件,并在該文件夾裏建立一(yī)個子目錄images,用來保存10張圖片,圖片格式爲gif,圖片名稱從0--9,圖片内容就是0--9十個數字,分(fēn)别與圖片名稱對應就可了。程序文件:index.jsp, addone.java, display.javaindex.jsp用來顯示紀錄結果。addone.java 是一(yī)個javabean用來寫紀錄到文件display.java 也是一(yī)個javabean用來讀取紀錄到index.jsp程序源碼:index.jsp
<%@ page import="popeyelin.*" contentType="text/html; charset=gb2312" language="java" %>
<html>
<head>
<title>JSP圖形防刷新計數器</title>
</head>
<body>
<jsp:useBean id="a" scope="page" class="popeyelin.addone"/>
<jsp:useBean id="b" scope="page" class="popeyelin.display"/>
已經有
<% b.counter();
for(int i=9;i>=0;i--) out.print(b.img[i]);
%>
個人訪問這個頁面
</body>
</html> 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 src="+img[j]+">";
img[j]=img[j]+"</img>";
i/=10;
j++;
}
}
catch(IOException e){
System.out.println(e.toString());
}
}
}
編譯addone.java和display.java後會生(shēng)成一(yī)個文件夾,popeyelin,把這個文件夾拷貝到WEB-INF/class目錄下(xià),如果不存在,請手動建立。運行index.jsp你就可以看到這個圖片計數器了程序分(fēn)析:重點就在于對文件的讀寫,我(wǒ)(wǒ)們看如下(xià)代碼
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();
我(wǒ)(wǒ)們如果要對文件進行讀寫操作,就必須先後建立2個對象,來對文件分(fēn)别進行讀和寫而且要注意,我(wǒ)(wǒ)們從文件裏讀出來的東西是字符串型的,如果我(wǒ)(wǒ)們要對他進行修改必須先轉換成int型,要用到 integer.parseint(),如果我(wǒ)(wǒ)們要先東西到文件,同樣要先将int轉換成string用integer.tostring(),寫文件用到pw.print()要寫的内容可以保存在變量裏,如:pw.print(temp),也可以直接寫,如:pw.print("hello,world");記住,寫完一(yī)定要關畢對象。pw.close()
方案4、用JSP制作頁面防刷新計數器(PHP)
<body>
<%@ 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; //如果計數文本中(zhōng)的計數值爲空則讓它顯示時變成1并寫入
try { readStr = file.readLine(); }
catch (IOException e)
{ System.out.println("讀取數據錯誤."); }
if (readStr == null) readStr = "沒有任何記錄";
//判斷cookie,第一(yī)次登陸時加1,刷新時不累計計數
else if (request.getHeader("Cookie")==null)
{ writeStr = Integer.parseInt(readStr)+1;}
else { writeStr = Integer.parseInt(readStr);}
//寫入時控制因爲刷新引起的重複計數
if (request.getHeader("Cookie")==null) {
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile));
pw.println(writeStr);
pw.close();}
catch(IOException e) {
out.println(e.getMessage());}
}
%>
<p align="center">您是傲雪寒梅網站的第<b><font color="red"><%=writeStr%></font></b>位客人。</p>
</body>
</html>
例如leadership\leader_ctl.jsp
<body leftmargin="0" topmargin="0" >
<%@ 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("<script>window.returnValue=0;window.close();</script>");
return;
}
else{
if (request.getParameter("Oper")!=null){
if (request.getParameter("Oper").equals("delLeader")){
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;</script>");
//return;
}
if(request.getParameter("Oper").equals("setLeader")){
//System.out.println("me3");
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;window.close();</script>");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("delCompetence")){
////System.out.println("strUserID:"+strUserID);
out.println("<script>alert('"+leader.LastOperMsg+"');history.back();</script>");
//System.out.println("me4");
//return;
}
if(request.getParameter("Oper").equals("addCompetence")){
//System.out.println("addCompetence1");
out.println("<script>alert('"+leader.LastOperMsg+"');history.back();</script>");
//System.out.println("addCompetence2");
//return;
}
else{
if (request.getParameter("Oper").equals("qx")){
out.println("<script>alert('"+leader.LastOperMsg+"');window.returnValue=0;window.close();</script>");
//return;
}
else{
//System.out.println("me6");
out.println("<script>alert('"+leader.LastOperMsg+"');window.close();</script>");
//return;
}//3e
}
}
}
%>
<2>如果要求每隔一(yī)段時間從服務器上自動刷新,需要加上:
(1) 種方法:
<%response.setHeader("Refresh","15");%>
15妙刷新一(yī)次
(2) 種方法:
自動刷新網頁
在HTML的與之間加入下(xià)面這段代碼,則在5分(fēn)鍾之後正在浏覽的頁面将會自動變爲target.html這一(yī)頁。代碼中(zhōng)300爲刷新的延遲時間,以秒爲單位。targer.html爲你想轉向的目标頁,若爲本頁則爲自動刷新本頁。
<meta http-equiv="refresh" content="300; url=target.html">
(3) 種方法:演示效果:本頁将在規定的時間自動刷新,代碼提示:将下(xià)面的代碼複制到〈head〉區
<script>
<!--
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+"分(fēn)"+cursec+"秒後重刷本頁!"
else
curtime=cursec+"秒後重刷本頁!"
window.status=curtime
setTimeout("beginrefresh()",1000)
}
}
window.onload=beginrefresh
//-->
</script>
<2>防止從服務器上自動刷新,需要加上:
<%@ page contentType="text/html;charset=gb2312"%><%@ page language="java" import="java.io.*"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>計數器</title></head>
<%!//同步更新計數器
synchronized void counter()
{
ServletContext application=getServletContext();
//構造application對象(可選)
String szPath=application.getRealPath("/");
//得到當前路徑
szPath=szPath+"hits.txt";
//計數器文件 0-9999999999999...
方案2
jJsp計數器,同一(yī)電腦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">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" http-equiv="refresh" >
<title>無标題文檔</title>
<link href="css/counter.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#FFFFFF">
<!--start counter -->
<div align="center">
<%@ 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 + "<br/>");
String strFullPath = session.getServletContext().getRealPath("/");
System.out.println(strFullPath);
ct.path=strFullPath+"/counter/count.txt";
//1 session存儲時間值,
//2 下(xià)次比較一(yī)下(xià)
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()));
//大(dà)于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()));
}
//小(xiǎo)于10秒
else
count=ct.getCount();
}
}
catch(Exception e)
{
}
//如果10秒内刷新,不計數
if(true){
}
%>
你是本站第 <span class="font12bgred" > <%=count%> </span> 位訪問者!
<!-- end counter -->
</div>
</body>
</html>
方案3、防刷新圖形計數器(已調試)
實例6:防刷新圖形計數器(已調試)程序說明:上次做的計數器沒有采用對文件的讀寫操作,雖然用到了javabean但是并沒有用到scope中(zhōng)的幾個參數:appliction,page,session這些參數分(fēn)别代表了bean的存活的周期,appliction>session>page我(wǒ)(wǒ)們利用這個原理來防止用戶刷新從而提高訪問次數的漏洞。程序準備:如果你使用的是apache+resin那麽請你在resin的根目錄下(xià)建立一(yī)個文本文件counter.txt并在裏面任意寫一(yī)個數字,比如100之類的。其次,請建立一(yī)個文件夾用來保存這個程序的所有文件,并在該文件夾裏建立一(yī)個子目錄images,用來保存10張圖片,圖片格式爲gif,圖片名稱從0--9,圖片内容就是0--9十個數字,分(fēn)别與圖片名稱對應就可了。程序文件:index.jsp, addone.java, display.javaindex.jsp用來顯示紀錄結果。addone.java 是一(yī)個javabean用來寫紀錄到文件display.java 也是一(yī)個javabean用來讀取紀錄到index.jsp程序源碼:index.jsp
<%@ page import="popeyelin.*" contentType="text/html; charset=gb2312" language="java" %>
<html>
<head>
<title>JSP圖形防刷新計數器</title>
</head>
<body>
<jsp:useBean id="a" scope="page" class="popeyelin.addone"/>
<jsp:useBean id="b" scope="page" class="popeyelin.display"/>
已經有
<% b.counter();
for(int i=9;i>=0;i--) out.print(b.img[i]);
%>
個人訪問這個頁面
</body>
</html> 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 src="+img[j]+">";
img[j]=img[j]+"</img>";
i/=10;
j++;
}
}
catch(IOException e){
System.out.println(e.toString());
}
}
}
編譯addone.java和display.java後會生(shēng)成一(yī)個文件夾,popeyelin,把這個文件夾拷貝到WEB-INF/class目錄下(xià),如果不存在,請手動建立。運行index.jsp你就可以看到這個圖片計數器了程序分(fēn)析:重點就在于對文件的讀寫,我(wǒ)(wǒ)們看如下(xià)代碼
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();
我(wǒ)(wǒ)們如果要對文件進行讀寫操作,就必須先後建立2個對象,來對文件分(fēn)别進行讀和寫而且要注意,我(wǒ)(wǒ)們從文件裏讀出來的東西是字符串型的,如果我(wǒ)(wǒ)們要對他進行修改必須先轉換成int型,要用到 integer.parseint(),如果我(wǒ)(wǒ)們要先東西到文件,同樣要先将int轉換成string用integer.tostring(),寫文件用到pw.print()要寫的内容可以保存在變量裏,如:pw.print(temp),也可以直接寫,如:pw.print("hello,world");記住,寫完一(yī)定要關畢對象。pw.close()
方案4、用JSP制作頁面防刷新計數器(PHP)
<body>
<%@ 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; //如果計數文本中(zhōng)的計數值爲空則讓它顯示時變成1并寫入
try { readStr = file.readLine(); }
catch (IOException e)
{ System.out.println("讀取數據錯誤."); }
if (readStr == null) readStr = "沒有任何記錄";
//判斷cookie,第一(yī)次登陸時加1,刷新時不累計計數
else if (request.getHeader("Cookie")==null)
{ writeStr = Integer.parseInt(readStr)+1;}
else { writeStr = Integer.parseInt(readStr);}
//寫入時控制因爲刷新引起的重複計數
if (request.getHeader("Cookie")==null) {
try {
PrintWriter pw = new PrintWriter(new FileOutputStream(nameOfTextFile));
pw.println(writeStr);
pw.close();}
catch(IOException e) {
out.println(e.getMessage());}
}
%>
<p align="center">您是傲雪寒梅網站的第<b><font color="red"><%=writeStr%></font></b>位客人。</p>
</body>
</html>