サーブレット、SPringMVC、Strutsなどフォームの繰り返しコミットを防止するためのさまざまな処理方法

2069 ワード

1つ目の処理方法(ブロッキング以外):
今のところこのような方法はお勧めしませんが、JSP仕様ではJAVAコードを書くことをお勧めしません.このような別の処理方法の理解を容易にすることができ,別の方法はブロックの思想を導入し,原理は基本的に同じであり,StrutsのTokenメカニズムを模倣している.
1、反復防止が必要なjspに以下のjavaコードを追加し、
    <%@page import="java.util.Random"%>

    <%@page import="java.util.Set"%>

    <%@page import="java.util.HashSet"%>  

     <%
        //    Token,       ,         
        Random ran = new Random();
     String formhash = String.valueOf(ran.nextInt());
     //    session   hashCode  ,     Set,    。
     Set<String> token= (Set<String>)  session.getAttribute("token");
     if (token== null) {
          token = new HashSet<String>();
     }
     //       
     while (token.contains(formhash)) {
          formhash = String.valueOf(ran.nextInt());
     }
     //    session  
     token.add(formhash);
     //   
     session.setAttribute("token", token);
     %>

2

fromフォームにドメインを追加
           
3、バックグラウンドコードは繰り返し提出するかどうかを推定する
        Map<String,String> map = new HashMap<String,String>();
        //      formhash
        String formhash = request.getParameter("formhash");
        //   session     
        Set<String> token= (Set<String>) request.getSession().getAttribute("token");
         //     ,      ,      
         if (token== null || !token.contains(formhash)) {
        	 map.put("flag", "false");
 			 map.put("message", "      ,      !");
 			return map;
          }

          //   ,      , session     formhash   !
          token.remove(formhash);
          request.getSession().setAttribute("token", token); 

繰り返しコミットしたと仮定して、直接returnエラーメッセージをページに送ればいいです.
もう1つの処理方法(ブロッキング):
Struts 2を使用したことがあると仮定すると,Struts 2のToken関連機構を参照すればよい.以下の実装はSpringMVC/SPring/Mybatisプロジェクトで実装する方法である.(コードは後ほど整理して貼り付けます)