1
2
JSP页面不能刷新、防止刷新的问题总结
3
添加时间:
2007
-
4
-
22
4
5
<
1
>
如果要求当发生选择、删除、修改等操作时,表单刷新,需要加上: window.returnValue
=
0
.
6
7
例如leadership\leader_ctl.jsp
8
9
<
body leftmargin
=
"
0
"
topmargin
=
"
0
"
>
10
<%
@ page contentType
=
"
text/html; charset=gb2312
"
language
=
"
java
"
import
=
"
java.sql.*
"
errorPage
=
""
%>
11
<%
@ page
import
=
"
leader.*
"
%>
12
<%
13
LeaderBean leader
=
new
LeaderBean();
14
String strUserID
=
request.getParameter(
"
Key
"
);
15
session.setAttribute(
"
EmployUserID
"
,strUserID);
16
//
System.out.println("strUserID:"+strUserID);
17
if
(leader.PostEdit(request))
{
18
// System.out.println("me5");
19
out.println( " <script>window.returnValue=0;window.close();</script> " );
20
return ;
21
}
22
else
{
23
if (request.getParameter( " Oper " ) != null )
{
24
if (request.getParameter( " Oper " ).equals( " delLeader " ))
{
25
out.println( " <script>alert(' " + leader.LastOperMsg + " ');window.returnValue=0;</script> " );
26
// return;
27
}
28
if (request.getParameter( " Oper " ).equals( " setLeader " ))
{
29
// System.out.println("me3");
30
out.println( " <script>alert(' " + leader.LastOperMsg + " ');window.returnValue=0;window.close();</script> " );
31
// System.out.println("me4");
32
// return;
33
}
34
if (request.getParameter( " Oper " ).equals( " delCompetence " ))
{
35
//// System.out.println("strUserID:"+strUserID);
36
out.println( " <script>alert(' " + leader.LastOperMsg + " ');history.back();</script> " );
37
// System.out.println("me4");
38
// return;
39
}
40
if (request.getParameter( " Oper " ).equals( " addCompetence " ))
{
41
// System.out.println("addCompetence1");
42
out.println( " <script>alert(' " + leader.LastOperMsg + " ');history.back();</script> " );
43
// System.out.println("addCompetence2");
44
// return;
45
}
46
else
{
47
if (request.getParameter( " Oper " ).equals( " qx " ))
{
48
out.println( " <script>alert(' " + leader.LastOperMsg + " ');window.returnValue=0;window.close();</script> " );
49
// return;
50
}
51
else
{
52
// System.out.println("me6");
53
out.println( " <script>alert(' " + leader.LastOperMsg + " ');window.close();</script> " );
54
// return;
55
} // 3e
56
}
57
}
58
}
59
%>
60
61
<
2
>
如果要求每隔一段时间从服务器上自动刷新,需要加上:
62
63
(
1
) 种方法:
64
65
<%
response.setHeader(
"
Refresh
"
,
"
15
"
);
%>
66
67
15妙刷新一次
68
69
(
2
) 种方法:
70
71
自动刷新网页
72
在HTML的与之间加入下面这段代码,则在5分钟之后正在浏览的页面将会自动变为target.html这一页。代码中300为刷新的延迟时间,以秒为单位。targer.html为你想转向的目标页,若为本页则为自动刷新本页。
73
74
<
meta http
-
equiv
=
"
refresh
"
content
=
"
300; url=target.html
"
>
75
76
(
3
) 种方法:演示效果:本页将在规定的时间自动刷新,代码提示:将下面的代码复制到〈head〉区
77
78
<
script
>
79
<!--
80
var limit
=
"
0:15
"
//
修改刷新时间
81
if
(document.images)
{
82
var parselimit = limit.split( " : " )
83
parselimit = parselimit[ 0 ] * 60 + parselimit[ 1 ] * 1
84
}
85
function beginrefresh()
{
86
if ( ! document.images)
87
return
88
if (parselimit == 1 )
89
window.location.reload()
90
else
{
91
parselimit -= 1
92
curmin = Math.floor(parselimit / 60 )
93
cursec = parselimit % 60
94
if (curmin != 0 )
95
curtime = curmin + " 分 " + cursec + " 秒后重刷本页! "
96
else
97
curtime = cursec + " 秒后重刷本页! "
98
window.status = curtime
99
setTimeout( " beginrefresh() " , 1000 )
100
}
101
}
102
window.onload
=
beginrefresh
103
//
-->
104
</
script
>
105
106
<
2
>
防止从服务器上自动刷新,需要加上:
107
108
<%
@ page contentType
=
"
text/html;charset=gb2312
"
%><%
@ page language
=
"
java
"
import
=
"
java.io.*
"
%>
109
<
html
>
110
<
head
>
111
<
meta http
-
equiv
=
"
Content-Type
"
content
=
"
text/html; charset=gb2312
"
>
112
<
title
>
计数器
</
title
></
head
>
113
<%!
//
同步更新计数器
114
synchronized
void
counter()
115
{
116
ServletContext application = getServletContext();
117
// 构造application对象(可选)
118
String szPath = application.getRealPath( " / " );
119
// 得到当前路径
120
szPath = szPath + " hits.txt " ;
121
// 计数器文件 0-9999999999999
122
123
方案2
124
125
jJsp计数器,同一电脑10秒内防刷新
126
127
<% @ page contentType = " text/html; charset=gb2312 " language = " java " import = " java.sql.* " errorPage = "" %>
128
<! DOCTYPE HTML PUBLIC " -//W3C//DTD HTML 4.01 Transitional//EN " " http://www.w3.org/TR/html4/loose.dtd " >
129
< html >
130
< head >
131
< meta http - equiv = " Content-Type " content = " text/html; charset=gb2312 " >
132
< meta name = " GENERATOR " http - equiv = " refresh " >
133
< title > 无标题文档 </ title >
134
< link href = " css/counter.css " temp_href = " css/counter.css " rel = " stylesheet " type = " text/css " >
135
</ head >
136
< body bgcolor = " #FFFFFF " >
137
<!-- start counter -->
138
< div align = " center " >
139
<% @ page import = " com.ckj.counter.*,java.io.*,java.util.Date " %>
140
<% Counter ct = new Counter();
141
String count = " 0 " ;
142
String counterid = " 0 " ;
143
try
{
144
// String strDirPath = new File(application.getRealPath(request.getRequestURI())).getParent();
145
// System.out.println("目录的绝对路径:" + strDirPath + "<br/>");
146
String strFullPath = session.getServletContext().getRealPath( " / " );
147
System.out.println(strFullPath);
148
ct.path = strFullPath + " /counter/count.txt " ;
149
// 1 session存储时间值,
150
// 2 下次比较一下
151
if (session.getAttribute( " counttime " ) == null )
{ // 如果 初次访问
152
count = ct.doCount();
153
// System.out.println("--------计算前11--------"+System.currentTimeMillis());
154
session.setAttribute( " counttime " ,String.valueOf(System.currentTimeMillis()));}
155
else
156
{ // 如果,刷新间隔超过
157
// System.out.println("--------刷新之差--------"+(System.currentTimeMillis()- Long.valueOf((String)session.getAttribute("counttime")).longValue()));
158
// 大于10秒
159
if ((System.currentTimeMillis() - Long.valueOf((String)session.getAttribute( " counttime " )).longValue()) > 9000 )
{
160
// System.out.println("--------计算后--------"+System.currentTimeMillis());
161
count = ct.doCount();
162
// session.removeAttribute("counttime");
163
session.setAttribute( " counttime " ,String.valueOf(System.currentTimeMillis()));
164
}
165
// 小于10秒
166
else
167
count = ct.getCount();
168
}
169
}
170
catch (Exception e)
171
{
172
}
173
// 如果10秒内刷新,不计数
174
if ( true )
{
175
}
176
%>
177
你是本站第 < span class = " font12bgred " >& nbsp; <%= count %>& nbsp; </ span > 位访问者!
178
<!-- end counter -->
179
</ div >
180
</ body >
181
</ html >
182
183
方案3、防刷新图形计数器(已调试)
184
185
实例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
186
187
<% @ page import = " popeyelin.* " contentType = " text/html; charset=gb2312 " language = " java " %>
188
< html >
189
< head >
190
< title > JSP图形防刷新计数器 </ title >
191
</ head >
192
< body >
193
< jsp:useBean id = " a " scope = " page " class = " popeyelin.addone " />
194
< jsp:useBean id = " b " scope = " page " class = " popeyelin.display " />
195
已经有
196
<% b.counter();
197
for ( int i = 9 ;i >= 0 ;i -- ) out.print(b.img[i]);
198
%>
199
个人访问这个页面
200
</ body >
201
</ html > addone.java package popeyelin;
202
import java.io. * ;
203
import java.lang. * ;
204
public class addone
{
205
private String s = new String(); // 建立数组变量sl
206
public void addone()
{
207
try
{
208
BufferedReader buff = new BufferedReader( new FileReader( " conuter.txt " ));
209
String s = buff.readLine();
210
int i = Integer.parseInt(s); // 将字符串变量s转化成整形
211
i ++ ;
212
buff.close(); // 关闭对象
213
PrintWriter pw = new PrintWriter( new FileWriter( " oounter.txt " ));
214
String temp = Integer.toString(i); // 将整形变量i转化成字符型
215
pw.print(temp);
216
pw.close();
217
}
218
catch (IOException e)
{
219
System.out.println(e.toString());
220
}
221
}
222
} display.java
223
package popeyelin;
224
import java.io. * ;
225
import java.lang. * ;
226
public class display
{
227
public String[]img = new String[ 10 ];
228
public void counter()
{
229
try
{
230
BufferedReader buff = new BufferedReader( new FileReader( " counter.txt " ));
231
String s = buff.readLine();
232
int i = Integer.parseInt(s);
233
int st = 10 ;
234
int j = 0 ;
235
while (j <= 9 )
{
236
img[j] = Integer.toString(i % st);
237
img[j] = img[j] + " .GIF " ;
238
img[j] = " images/ " + img[j];
239
img[j] = " <img src= " + img[j] + " temp_src= " + img[j] + " > " ;
240
img[j] = img[j] + " </img> " ;
241
i /= 10 ;
242
j ++ ;
243
}
244
}
245
catch (IOException e)
{
246
System.out.println(e.toString());
247
}
248
}
249
}
250
251
编译addone.java和display.java后会生成一个文件夹,popeyelin,把这个文件夹拷贝到WEB - INF / class 目录下,如果不存在,请手动建立。运行index.jsp你就可以看到这个图片计数器了程序分析:重点就在于对文件的读写,我们看如下代码
252
253
BufferedReader buff = new BufferedReader( new FileReader( " conuter.txt " ));
254
String s = buff.readLine();
255
int i = Integer.parseInt(s); // 将字符串变量s转化成整形
256
i ++ ;
257
buff.close(); // 关闭对象
258
PrintWriter pw = new PrintWriter( new FileWriter( " oounter.txt " ));
259
String temp = Integer.toString(i); // 将整形变量i转化成字符型
260
pw.print(temp);
261
pw.close();
262
263
我们如果要对文件进行读写操作,就必须先后建立2个对象,来对文件分别进行读和写而且要注意,我们从文件里读出来的东西是字符串型的,如果我们要对 他进行修改必须先转换成int型,要用到 integer.parseint(),如果我们要先东西到文件,同样要先将int转换成string用integer.tostring(),写文件用 到pw.print()要写的内容可以保存在变量里,如:pw.print(temp),也可以直接写,如:pw.print( " hello, world " );记住,写完一定要关毕对象。pw.close()
264
265
方案4、用JSP制作页面防刷新计数器(PHP)
266
267
< body >
268
<% @ page import = " java.io.* " %>
269
<%
270
String currentRecord = null ; // 保存文本的变量
271
BufferedReader file; // BufferedReader对象,用于读取文件数据
272
String nameOfTextFile = " e:\\count.txt " ;
273
// 读取
274
file = new BufferedReader( new FileReader(nameOfTextFile));
275
String readStr = null ;
276
int writeStr = 0 ; // 如果计数文本中的计数值为空则让它显示时变成1并写入
277
try
{ readStr = file.readLine(); }
278
catch (IOException e)
279
{ System.out.println( " 读取数据错误. " ); }
280
if (readStr == null ) readStr = " 没有任何记录 " ;
281
// 判断cookie,第一次登陆时加1,刷新时不累计计数
282
else if (request.getHeader( " Cookie " ) == null )
283
{ writeStr = Integer.parseInt(readStr) + 1 ;}
284
else
{ writeStr = Integer.parseInt(readStr);}
285
// 写入时控制因为刷新引起的重复计数
286
if (request.getHeader( " Cookie " ) == null )
{
287
try
{
288
PrintWriter pw = new PrintWriter( new FileOutputStream(nameOfTextFile));
289
pw.println(writeStr);
290
pw.close();}
291
catch (IOException e)
{
292
out.println(e.getMessage());}
293
}
294
%>
295
< p align = " center " > 您是傲雪寒梅网站的第 < b >< font color = " red " ><%= writeStr %></ font ></ b > 位客人。 </ p >
296
</ body >
297
</ html >
298
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298