欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

淺談利用Session防止表單重復(fù)提交

 更新時間:2017年12月06日 10:56:32   作者:amork  
這篇文章主要介紹了淺談利用Session防止表單重復(fù)提交,簡單介紹表單重復(fù)提交的情況,分析,以及解決方法代碼示例,具有一定借鑒價值,需要的朋友可以了解下。

解決項(xiàng)目中表單重復(fù)提交的問題,在平常的項(xiàng)目中有以下幾種可能出現(xiàn)表單重復(fù)提交的情況,比如說:

1.由于服務(wù)器緩慢或者網(wǎng)絡(luò)延遲的原因,重復(fù)點(diǎn)擊提交按鈕

2.已經(jīng)提交成功,但是還不停刷新成功頁面

3.已經(jīng)提交成功,通過回退,再次點(diǎn)擊提交按鈕。

這些情況都可能使數(shù)據(jù)庫中產(chǎn)生過多相同的冗余數(shù)據(jù),浪費(fèi)數(shù)據(jù)庫資源。只有轉(zhuǎn)發(fā)才會出現(xiàn),重定向則不會。

針對第一種情況的解決方案(使用JavaScript),對后面兩種無效:

首先在頁面中添加如下格式的JavaScript代碼

 var submitFlag=false;
 function checksubmit(){
 if(!submitFlag){
  submitFlag=true;
  document.forms[0].submit(); 
  }
 }

(1)當(dāng)提交按鈕的type屬性為button時:

設(shè)置按鈕的onClick=”checksubmit();”即可。

(2)當(dāng)提交按鈕的type屬性為submit時:

設(shè)置按鈕的onClick=”checksubmit();”,并在<form>標(biāo)簽中增加onsubmit=”returnfalse”。因?yàn)閟ubmit按鈕的自動提交時在點(diǎn)擊事件提交之后,將onsubmit設(shè)置為”returnfalse”,submit按鈕的自動提交就會失效。

對于后面兩種情況,可以使用session解決,其原理是在運(yùn)行添加信息頁面時在session中放置信息,然后頁面提交信息給servlet處理,servlet獲取session中的信息,如果session中有信息不為空則將信息插入數(shù)據(jù)庫,然后刪除session中的信息,下次再提交表單時session中的信息為空,那么則不執(zhí)行存儲信息過程。

但是單純使用session有其局限性,所以在實(shí)際開發(fā)中,一般使用利用session結(jié)合UUID解決表單的重復(fù)提交,代碼如下:

定義一個UuidToken類

public class UuidToken {
	private static UuidToken UuidToken=new UuidToken();
	private UuidToken(){
	}
	public static UuidToken getUuidToken() {
		return UuidToken;
	}
	public synchronized String getUUIDAsStr(HttpServletRequest request){
		HttpSession session=request.getSession();
		String uuidStr=UUID.randomUUID().toString();
		if(uuidStr!=null){
			session.setAttribute("session.uuid", uuidStr);
		}
		return uuidStr;
	}
	/**
 * 判斷session中保存的uuid和jsp頁面上的uuid是否相等 
 */
	public synchronized Boolean isUUIDValidate(HttpServletRequest request) {
		//獲取已存在的session 
		HttpSession session=request.getSession(false);
		if(session==null){
			return false;
		}
		String sessionuuid = (String)session.getAttribute ("session.uuid");
		if(sessionuuid==null){
			return false;
		}
		String htmluuid=request.getParameter("html.uuid");
		if(htmluuid==null){
			return false;
		}
		return sessionuuid.equals(htmluuid);
	}
	/**
 * 刪除uuid 
 */
	public synchronized void resetUUID(HttpServletRequest request) {
		HttpSession session=request.getSession(false);
		if(session==null){
			return;
		}
		session.removeAttribute("session.uuid");
	}
}

在jsp頁面增加一個隱藏域,利用uuid生成一個唯一的標(biāo)識號,賦給隱藏域,把唯一的標(biāo)識號 放置到session中一份,代碼如下:

<input type="hidden" name="html.uuid" value='<%=UuidToken.getUuidToken().getUUIDAsStr(request)%>'>    

提交給servlet后,獲取 jsp頁隱藏域的值,用隱藏域的值和session中放置的值做比對,如果相同,保存數(shù)據(jù)并從session中刪除UUID,不相同則說明是重復(fù)提交,不進(jìn)行處理。

Boolean flag= UuidToken.getUuidToken().isUUIDValidate(request);
if(flag){
	// 保存信息到數(shù)據(jù)庫
	//從session刪除uuid的
	UuidToken.getUuidToken().resetUUID(request);
} else{
	System.out.println("表單重復(fù)提交");
}

總結(jié)

以上就是本文關(guān)于淺談利用Session防止表單重復(fù)提交的全部內(nèi)容,希望對大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專題,如有不足之處,歡迎留言指出。感謝朋友們對本站的支持!

相關(guān)文章

  • java如何實(shí)現(xiàn)獲取客戶端ip地址的示例代碼

    java如何實(shí)現(xiàn)獲取客戶端ip地址的示例代碼

    本文主要介紹了java如何實(shí)現(xiàn)獲取客戶端ip地址,主要包括java獲取客戶端ip地址工具類使用實(shí)例、應(yīng)用技巧,文中通過示例代碼介紹的非常詳細(xì),感興趣的小伙伴們可以參考一下
    2022-04-04
  • mybatis 集合嵌套查詢和集合嵌套結(jié)果的區(qū)別說明

    mybatis 集合嵌套查詢和集合嵌套結(jié)果的區(qū)別說明

    這篇文章主要介紹了mybatis 集合嵌套查詢和集合嵌套結(jié)果的區(qū)別說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • spring boot添加新模塊的方法教程

    spring boot添加新模塊的方法教程

    這篇文章主要給大家介紹了關(guān)于spring boot添加新模塊的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-11-11
  • java使用JDBC連接數(shù)據(jù)庫的五種方式(IDEA版)

    java使用JDBC連接數(shù)據(jù)庫的五種方式(IDEA版)

    這篇文章主要介紹了java使用JDBC連接數(shù)據(jù)庫的五種方式(IDEA版),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • idea如何快速查找一個類或類中方法名和變量

    idea如何快速查找一個類或類中方法名和變量

    這篇文章主要介紹了idea如何快速查找一個類或類中方法名和變量問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • mybatis自定義參數(shù)類型轉(zhuǎn)換器數(shù)據(jù)庫字段加密脫敏

    mybatis自定義參數(shù)類型轉(zhuǎn)換器數(shù)據(jù)庫字段加密脫敏

    這篇文章主要為大家介紹了mybatis自定義參數(shù)類型轉(zhuǎn)換器數(shù)據(jù)庫字段加密脫敏,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • SpringBoot教程_創(chuàng)建第一個SpringBoot項(xiàng)目

    SpringBoot教程_創(chuàng)建第一個SpringBoot項(xiàng)目

    這篇文章主要介紹了SpringBoot教程_創(chuàng)建第一個SpringBoot項(xiàng)目,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    SpringBoot JSON全局日期格式轉(zhuǎn)換器實(shí)現(xiàn)方式

    這篇文章主要介紹了SpringBoot JSON全局日期格式轉(zhuǎn)換器,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • 詳解java一維數(shù)組及練習(xí)題實(shí)例

    詳解java一維數(shù)組及練習(xí)題實(shí)例

    在本篇文章里小編給大家整理了關(guān)于java一維數(shù)組及練習(xí)題的相關(guān)知識點(diǎn)和實(shí)例代碼,有需要的朋友們跟著學(xué)習(xí)下。
    2019-07-07
  • 使用java實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲

    使用java實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲

    這篇文章主要介紹了使用java實(shí)現(xiàn)網(wǎng)絡(luò)爬蟲,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07

最新評論