首頁 > 網際網路

javaWEB解決表單重複提交的問題(原理)

2019-12-10 19:23:22

javaWEB解決表單重複提交的問題(原理)

表單的重複提交    1> 重複提交的情況:             1> 在表單提交到一個Servlet,而Servlet又通過請求轉發的方式響應了一個JSP(HTML)頁面,            此時位址列還保留著Servlet的那個路徑,在響應頁面點選「重新整理」,這就是一個重複提交的情況。             2> 在響應頁面沒有到達時,重複點選提交按鈕。             3> 點選返回,再點選提交。    2> 不是重複提交的情況:點選「返回」,「重新整理」原頁面,在「提交」    3> 如何避免表單的重複提交:        在表單中做一個標記,提交到Servlet時,檢查標記是否存在且是否和預定義的標記一致,若一致,則受理請求,        並銷毀標記,若不一致或沒有標記,則直接響應提示資訊:"重複提交";        解決:把標記放在session中,可以!        1> 在原表單頁面,生成一個隨機值 token        2> 在原表單頁面,把token值放入session 屬性中        3> 在元表單頁面,把token值放入到隱藏域中。        4> 在目標的Servlet 中:獲取session 和隱藏域中的token值        5> 比較兩個值是否一致:若一致,受理請求,且把session域中的token屬性清除        6> 若不一致,則直接響應提示頁面:"重複提交"

1

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

10.再次測試,發現重定向到了success.jsp ,再點選重新整理的話也不會出現重複提交了


11

11.那問題解決了麼?再看,當我點選瀏覽器中的返回,然後再點選提交,如此反復,仍然在重複呼叫Servlet,這也是重複提交


12

12.現在修改Index.jsp


13

13.修改servlet程式碼


14

14.新建token檔案,程式碼如下



15

15.在瀏覽器中測試(註,這裡如果再使用Eclipse自帶瀏覽器的話,會出現快取問題,所以使用正常的瀏覽器火狐或者IE)


16

16.hidden中的token 和session中的token是相同的


17

17.當點選瀏覽器中的後退按鈕,再次進行操作,發現不能重複提交



18

18.這是因為session中的token已經被移除掉了


19

19.而返回後重新整理頁面,相當於新開一個index.jsp 重新獲取token 賦值給session,這時可以正常提交了



IT145.com E-mail:sddin#qq.com