java jsp處理用戶多次點(diǎn)擊提交按鈕造成數(shù)據(jù)重復(fù),最常見的方法是點(diǎn)擊按鈕提交之后,讓線程休眠幾秒再執(zhí)行,如下代碼:
成都創(chuàng)新互聯(lián)公司是專業(yè)的龍文網(wǎng)站建設(shè)公司,龍文接單;提供做網(wǎng)站、網(wǎng)站設(shè)計(jì),網(wǎng)頁(yè)設(shè)計(jì),網(wǎng)站設(shè)計(jì),建網(wǎng)站,PHP網(wǎng)站建設(shè)等專業(yè)做網(wǎng)站服務(wù);采用PHP框架,可快速的進(jìn)行龍文網(wǎng)站開發(fā)網(wǎng)頁(yè)制作和功能擴(kuò)展;專業(yè)做搜索引擎喜愛的網(wǎng)站,專業(yè)的做網(wǎng)站團(tuán)隊(duì),希望更多企業(yè)前來(lái)合作!
1.提交的表單頁(yè)面
%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%
!DOCTYPE?HTML
html
head
titleForm表單/title
/head
body
form?action="${pageContext.request.contextPath}/servlet/DoFormServlet"?method="post"
用戶名:input?type="text"?name="username"
input?type="submit"?value="提交"?id="submit"
/form
/body
/html
2.處理提交表單的servlet,里面有提供防止重復(fù)提交的代碼,如下:
package?xdp.gacl.session;
import?java.io.IOException;
import?javax.servlet.ServletException;
import?javax.servlet.http.HttpServlet;
import?javax.servlet.http.HttpServletRequest;
import?javax.servlet.http.HttpServletResponse;
public?class?DoFormServlet?extends?HttpServlet?{
public?void?doGet(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
//客戶端是以UTF-8編碼傳輸數(shù)據(jù)到服務(wù)器端的,所以需要設(shè)置服務(wù)器端以UTF-8的編碼進(jìn)行接收,否則對(duì)于中文數(shù)據(jù)就會(huì)產(chǎn)生亂碼
request.setCharacterEncoding("UTF-8");
String?userName?=?request.getParameter("username");
try?{
//讓當(dāng)前的線程睡眠3秒鐘,模擬網(wǎng)絡(luò)延遲而導(dǎo)致表單重復(fù)提交的現(xiàn)象
Thread.sleep(3*1000);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
System.out.println("向數(shù)據(jù)庫(kù)中插入數(shù)據(jù):"+userName);
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
1.新建兩個(gè)文件
index.jsp -- 表單頁(yè)面
success.jsp -- 結(jié)果提示頁(yè)面
2
2.代碼分別如下:
3
3.新建TokenServlet,代碼如下
4
4.運(yùn)行index.jsp,輸入用戶名,點(diǎn)擊提交
5
5.正常跳轉(zhuǎn)結(jié)果頁(yè)面
6
6.但當(dāng)我在這個(gè)頁(yè)面點(diǎn)擊刷新的時(shí)候,出現(xiàn)如下提示
7
7.點(diǎn)擊重試,發(fā)現(xiàn)又一次調(diào)用了servlet,這就是一個(gè)重復(fù)提交
8
8.多刷新幾次,注意看URL地址,現(xiàn)在仍然是servlet
9
9.以前說(shuō)重定向可以解決表單重復(fù)提交的問(wèn)題,我們修改Servlet代碼如下
10.再次測(cè)試,發(fā)現(xiàn)重定向到了success.jsp ,再點(diǎn)擊刷新的話也不會(huì)出現(xiàn)重復(fù)提交了
11.那問(wèn)題解決了么?再看,當(dāng)我點(diǎn)擊瀏覽器中的返回,然后再點(diǎn)擊提交,如此反復(fù),仍然在重復(fù)調(diào)用Servlet,這也是重復(fù)提交
12.現(xiàn)在修改Index.jsp
13.修改servlet代碼
14.新建token文件,代碼如下
15.在瀏覽器中測(cè)試(注,這里如果再使用Eclipse自帶瀏覽器的話,會(huì)出現(xiàn)緩存問(wèn)題,所以使用正常的瀏覽器火狐或者IE)
16.hidden中的token 和session中的token是相同的
17.當(dāng)點(diǎn)擊瀏覽器中的后退按鈕,再次進(jìn)行操作,發(fā)現(xiàn)不能重復(fù)提交
18.這是因?yàn)閟ession中的token已經(jīng)被移除掉了
19.而返回后刷新頁(yè)面,相當(dāng)于新開一個(gè)index.jsp 重新獲取token 賦值給session,這時(shí)可以正常提交了
是username沒有拿到值。文件框你還是用struts2自帶的標(biāo)簽的文本框,再嘗試下。
防止重復(fù)提交的方法很多,例如:
1、Meta法
在你的表單頁(yè)里HEAD區(qū)加入這段代碼:
META HTTP-EQUIV="pragma" CONTENT="no-cache"
META HTTP-EQUIV="Cache-Control" CONTENT="no-cache, must-revalidate"
META HTTP-EQUIV="expires" CONTENT="Wed, 26 Feb 1997 08:21:57 GMT"
2、令牌法
生成一個(gè)令牌保存在用戶session中,在form中加一個(gè)hidden域,顯示該令牌的值,form提交后重新生成一個(gè)新的令牌,將用戶提交的令牌和session中的令牌比較,如不同則為重復(fù)提交。
3、禁用按鈕法
input type="button" value="提交" onclick="this.disabled=true;this.form.submit()"
4、struts配置法
修改struts-config.xml文件,在action里面有一個(gè)redirect重新定向的屬性,struts中默認(rèn)的是false,添加這個(gè)屬性,改成true,在forword中寫上要跳轉(zhuǎn)頁(yè)面的絕對(duì)或者相對(duì)地址就行了
修改如下:
action-mappings
action attribute="newsActionForm" name="newsActionForm" input="/addnews.jsp" path="/newsAction" parameter="method" scope="request" type="com.yongtree.news.action.NewsAction"
forward name="list" path="/listnews.jsp" redirect="true"/forward
forward name="error" path="/addnews.jsp"/forward
/action
/action-mappings
本文題目:java表單重復(fù)提交代碼,前端表單重復(fù)提交
標(biāo)題網(wǎng)址:http://m.newbst.com/article42/dsighhc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制網(wǎng)站、ChatGPT、、企業(yè)網(wǎng)站制作、域名注冊(cè)、標(biāo)簽優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)