java jsp處理用戶多次點擊提交按鈕造成數據重復,最常見的方法是點擊按鈕提交之后,讓線程休眠幾秒再執行,如下代碼:
成都創新互聯公司是專業的龍文網站建設公司,龍文接單;提供做網站、網站設計,網頁設計,網站設計,建網站,PHP網站建設等專業做網站服務;采用PHP框架,可快速的進行龍文網站開發網頁制作和功能擴展;專業做搜索引擎喜愛的網站,專業的做網站團隊,希望更多企業前來合作!
1.提交的表單頁面
%@?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,里面有提供防止重復提交的代碼,如下:
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編碼傳輸數據到服務器端的,所以需要設置服務器端以UTF-8的編碼進行接收,否則對于中文數據就會產生亂碼
request.setCharacterEncoding("UTF-8");
String?userName?=?request.getParameter("username");
try?{
//讓當前的線程睡眠3秒鐘,模擬網絡延遲而導致表單重復提交的現象
Thread.sleep(3*1000);
}?catch?(InterruptedException?e)?{
e.printStackTrace();
}
System.out.println("向數據庫中插入數據:"+userName);
}
public?void?doPost(HttpServletRequest?request,?HttpServletResponse?response)
throws?ServletException,?IOException?{
doGet(request,?response);
}
}
1.新建兩個文件
index.jsp -- 表單頁面
success.jsp -- 結果提示頁面
2
2.代碼分別如下:
3
3.新建TokenServlet,代碼如下
4
4.運行index.jsp,輸入用戶名,點擊提交
5
5.正常跳轉結果頁面
6
6.但當我在這個頁面點擊刷新的時候,出現如下提示
7
7.點擊重試,發現又一次調用了servlet,這就是一個重復提交
8
8.多刷新幾次,注意看URL地址,現在仍然是servlet
9
9.以前說重定向可以解決表單重復提交的問題,我們修改Servlet代碼如下
10.再次測試,發現重定向到了success.jsp ,再點擊刷新的話也不會出現重復提交了
11.那問題解決了么?再看,當我點擊瀏覽器中的返回,然后再點擊提交,如此反復,仍然在重復調用Servlet,這也是重復提交
12.現在修改Index.jsp
13.修改servlet代碼
14.新建token文件,代碼如下
15.在瀏覽器中測試(注,這里如果再使用Eclipse自帶瀏覽器的話,會出現緩存問題,所以使用正常的瀏覽器火狐或者IE)
16.hidden中的token 和session中的token是相同的
17.當點擊瀏覽器中的后退按鈕,再次進行操作,發現不能重復提交
18.這是因為session中的token已經被移除掉了
19.而返回后刷新頁面,相當于新開一個index.jsp 重新獲取token 賦值給session,這時可以正常提交了
是username沒有拿到值。文件框你還是用struts2自帶的標簽的文本框,再嘗試下。
防止重復提交的方法很多,例如:
1、Meta法
在你的表單頁里HEAD區加入這段代碼:
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、令牌法
生成一個令牌保存在用戶session中,在form中加一個hidden域,顯示該令牌的值,form提交后重新生成一個新的令牌,將用戶提交的令牌和session中的令牌比較,如不同則為重復提交。
3、禁用按鈕法
input type="button" value="提交" onclick="this.disabled=true;this.form.submit()"
4、struts配置法
修改struts-config.xml文件,在action里面有一個redirect重新定向的屬性,struts中默認的是false,添加這個屬性,改成true,在forword中寫上要跳轉頁面的絕對或者相對地址就行了
修改如下:
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表單重復提交代碼,前端表單重復提交
標題網址:http://vcdvsql.cn/article42/dsighhc.html
成都網站建設公司_創新互聯,為您提供定制網站、ChatGPT、、企業網站制作、域名注冊、標簽優化
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯