フォームからデータを取得してデータベースに挿入するサーブレットがあります。サーブレットでは、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で、属性セットを削除してから、そのページにリンクを指定して、ホームページに戻ります。