導航:首頁 > 編程語言 > jsp防止重復提交

jsp防止重復提交

發布時間:2024-10-29 23:49:30

① struts2 如何防止表單重復提交

一、造成重復提交主要的兩個原因:
在平時的開發過程中,經常可以遇到表單重復提交的問題,如做一個注冊頁面,如果表單重復提交,那麼一個用戶就會注冊多次,重復提交主要由於兩種原因。
1、 一是,伺服器處理時間久。當用戶在表單中填完信息,點擊「提交」按鈕後,由於伺服器反應時間過長沒能及時看到響應信息,或者出於其它目的,再次點擊「提 交」按鈕,從而導致在伺服器端接收到兩條或多條相同的信息。如果信息需要存儲到後台資料庫中,如此以來就會產生資料庫操作異常提示信息,以至於給用戶帶來 錯誤信息提示,從而給用戶的使用帶來不便。
2、二是,forward跳轉引起的重復提交。在頁面跳轉的時候,有兩種類型:請求轉發和重定向,所謂請求轉發是在伺服器端進行跳轉,對用戶是透明的,此時瀏覽器中的地址不會發生改變,重定向是在客戶端發生跳轉,跳轉時候瀏覽器中的地址欄會發生改變,如果在注冊時,使用了請求轉發,那麼當刷新頁面時,就會引起表單的重復提交
二、解決方案
方案一、使用struts2中的token攔截器或者tokenSession攔截器
對token的簡單理解:
1)當用戶首次訪問包含表單的頁面時,伺服器會在這次會話中創建一個session對象,並產生一個令牌值,然後將這個令牌值作為隱藏輸入域的值,隨表單一起發送到伺服器端,同時將令牌值保存到Session中。
2) 當用戶提交頁面時,伺服器首先判斷請求參數中的令牌值和Session中保存的令牌值是否相等,若相等,則清楚Session中的令牌值,然後執行數據處 理操作。如果不相等,則提示用戶已經提交過了表單,同時產生一個新的令牌值,保存到Session中。當用戶重新訪問提交數據頁面時,將新產生的令牌值作 為隱藏輸入域的值。
####
token: 在活動Action中檢查合法令牌(token), 防止表單的重復提交;
token-session: 同上, 但是在接到非法令牌時將提交的數據保存在session中;
主要步驟如下:
第一步:在表單中加入<s:token />(當然啦!要首先導入struts2的標簽庫 <%@taglib uri="/struts-tags" prefix="s" %>)
<s:form action="helloworld_other" method="post" namespace="/test">
<s:textfield name="person.name"/><s:token/><s:submit/>
</s:form>
第二步:在struts.xml配置文件中相應的action上配置token攔截器或者tokenSession攔截器。此攔截器只能用在有form的提交請求上。
<action name="helloworld_*" class="com.jim.action.HelloWorldAction" method="{1}">
<interceptor-ref name="defaultStack"/>
<interceptor-ref name="token" />

<result name="invalid.token">/WEB-INF/page/message.jsp</result>

<result>/WEB-INF/page/result.jsp</result>

</action>
以上配置加入了「token」攔截器和「invalid.token」結果,因為「token」攔截器在會話的token與請求的token不一致時,將會直接返回「invalid.token」結果。

方案二:基於第二種重復提交表單的原因,伺服器內部使用重定向
在Struts2中的struts.xml中,result標簽的type默認值是 dispatcher,(請求轉發),要實現以上的功能,肯定不能使用默認值,需要將其值設為redirectAction(重定向到某一 Action),也就是說重一個Action跳轉到另外一個Action,此時瀏覽器中的地址是第二個Action,結合到上面的需求,可以再第一個 Action中將記錄添加到資料庫中,然後在第二個Action中將數據讀取出來。以後每次刷新,那麼只會執行第二個Action。
到struts-default.xml中找到與redirectionAction對應的一個類,ServletActionRedirectResult

從Api文檔中發現找出裡面有一個欄位叫做actionName,指定需要跳轉的Action
配置方法如下:
<action name="add" class="com.action.AddAction">
<result name="success" type="redirectAction">
<param name="actionName">show_show</param>
</result>
</action>

至於第二個Action的配置方法,相信學過struts2的同學都會。

② 請問:forward()方法怎麼使用

<jsp:forward>的作用是重定向一個html,jsp或者是一個程序段。
比如:<jsp:forward page="/servlet/login" />
<jsp:forward page="/servlet/login">
<jsp:param name="username" value="jsmith" />
</jsp:forward>

③ jsp頁面中用<jsp:forward>跳轉登陸的頁面,如果登陸成功就是跳轉到manage.jsp中,結果地址欄上的地址沒變。

forword是屬於JSP中的一種「轉發」,在伺服器端不管做了什麼事,瀏覽器是不知道的,所以地址欄的地址是不變的。如果想讓地址改變,你要用「重定向」

④ struts+hibernate提交員工,跳轉到列表頁面後刷新就會重復提交,用jsp或struts怎麼處理才能解決呀急急急

原因是:員工抄.jsp點擊提交後,瀏覽器上襲顯示的路徑就變成你提交的路徑了,所以即使到列表頁面,瀏覽器也是你在 員工.jsp頁面提交的請求路徑

解決方法:
一、用iframe,員工.jsp是iframe中的一部分,這樣瀏覽器上顯示的地址永遠是iframe的地址
二、struts提供的token,具體怎麼使用自己去網上找找token的使用

個人覺得第一種方法最簡單,省時省力,以後再也不會出現重復提交的問題了

閱讀全文

與jsp防止重復提交相關的資料

熱點內容
傑德原車導航升級 瀏覽:240
編程dest是什麼意思 瀏覽:935
linux埠鏡像 瀏覽:820
iphone5屏幕清塵 瀏覽:157
機頂盒密碼怎麼改 瀏覽:672
w7系統下載32位教程 瀏覽:618
pcb文件包括哪些內容 瀏覽:598
g00文件 瀏覽:607
用bat程序刪除程序 瀏覽:516
dnf鬼泣90版本打安圖恩 瀏覽:668
245倒角編程怎麼計算 瀏覽:599
可以買生活用品的app有哪些 瀏覽:175
cad在c盤產生的文件夾 瀏覽:541
聯想手機解鎖工具 瀏覽:696
瑞銀3887win10 瀏覽:833
學網路編程哪個好 瀏覽:805
手機vmos導入的文件在哪裡 瀏覽:115
蘋果手機可以把文件傳到華為嗎 瀏覽:63
海川化工下載的文件默認到哪裡 瀏覽:343
學唱粵語歌app 瀏覽:975

友情鏈接