5

フォームからデータを取得してデータベースに挿入するサーブレットがあります。サーブレットでは、Beanを使用し、Beanを介してデータを取得/設定します。挿入が行われると、ユーザーはページがどの程度正確であるかを示すビューにリダイレクトされます。このページはJSPです。このページrefresh(jsp)を実行すると、データベースにデータが挿入されます。これを防ぐ必要があります。jspにリダイレクトするのではなく、別のサーブレットにリダイレクトして、そのサーブレットを使用すると、getリクエストを実行し、それをjspに転送して表示できます。このアプローチでは、jspをリファクタリングし、影響を受けるjspが多数あります。

ページの更新が行われたときにデータベースへの挿入を防ぐことができる他の方法はありますか?

また、一意の制約を追加できると仮定してデータベース側で確認しました。初期サーブレットを介して生成される一意の列がいくつかあるため、挿入値ごとに異なるため、DB側でソリューションを実際に使用することはできません。

これに対する回避策が存在するかどうか誰かが私に提案できますか?

更新:挿入するコードを追加して、手動でページを更新しています。これは、以前に考慮しなかったバグのようです。データベースに正しく挿入され、ビューjspにすべてのデータが正しく表示されます。ビューjspの場合更新されると、データベースに二重挿入されます。

更新。コードを削除しました。コード全体ではなく、コードの関連部分を投稿します。

問題は解決しました。

 javax.servlet.http.HttpSession session = request.getSession();            
        if (session.getAttribute("insertflag") == null) {
            mybean sf = new mybean();
            sf.insert(form);
            session.setAttribute("insertflag", insertid);
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/test/showtestform.jsp");                
            rd.forward(request, response);
        } else {                
            RequestDispatcher rd = request.getRequestDispatcher("/errorpage.jsp");
            rd.forward(request, response);
        }

エラーページjspで、属性セットを削除してから、そのページにリンクを指定して、ホームページに戻ります。

4

3 に答える 3

7

簡単な回避策は、Sessionにフラグを設定することです。挿入が行われるときはいつでも..そして挿入する前に、このフラグが存在するかどうか常にセッションをチェックしてください。

サーブレット内; データベースに挿入する前。次のチェックを行います。

if (session.getAttribute("recordInsertedSuccessfully") == null )
{
   //proceed with insertion
   //after inserting into the database we should do :
   session.putAttribute("recordInsertedSuccessfully","true");
} else {
   //case of form re-submission
}

ユーザーがこれらのレコードの2つを挿入する有効なシナリオの可能性がある場合(ユーザーが参照してから同じテーブルにレコードを再度挿入する可能性があります;これは有効なシナリオです); 次に、フォームがユーザーに表示される前に、次のコードも追加する必要があります。

session.removeAttribute("recordInsertedSuccessfully");
于 2013-01-07T03:42:32.287 に答える
1

onclickイベントでjavascriptを使用してフォームを送信する

<input type=submit>を使用 してフォームを送信しないでください <input type=button>

于 2013-01-07T03:49:14.880 に答える
0

セッション属性についてどう思いますか?フォーム送信で新しいセッション属性を作成し、正常に作業が完了したらそれを無効にします。

また、アクションサーブレットで、セッション属性が使用可能な場合は条件を追加し、使用できない場合はフォームの送信を続行してから、フォームページにリダイレクトします。

于 2015-10-23T11:07:50.653 に答える