サーブレットの基礎知識

Submitボタンの2度押しへの対策

テンアートニ 中越智哉
2001/6/27

 よく、フォームの送信ページなどで「送信ボタンを続けて押さないでください」というコメントを見かけることがあります。これは、フォームの情報を受信して処理を行うページの場合は処理に若干時間がかかるため、ユーザーがこれを正しく送信されていないと勘違いして送信ボタンを何度も押してしまうことがあるからです。

 サーブレットでは、あくまでリクエスト単位で処理が起動するので、同じブラウザからの連続したリクエストであっても、別スレッドが起動して処理を行ってしまいます。もし、そのページがオンラインショッピングの決済画面だった場合、送信ボタンを連続して押してしまうと、そのままでは、同じ発注が何度も行われてしまうことになりかねないので、何らかの対策を施す必要があります。

■対策1:ユーザーに2度押しをしないように警告する

 これは、技術的な解決方法ではありませんが、2度押しをした場合にユーザーに対してどういう問題が起こるか、また、このリクエストの処理には時間がかかるということをあらかじめユーザーに告知しておくことで、2度押しの行為そのものを減らすという効果はあるでしょう。

■対策2:JavaScriptなどで2度押しを防ぐ

 フォームのボタン要素にはonClickという属性があり、これを使うとボタンが押されるたびに決まったJavaScriptを実行させることができます。

 JavaScriptで、同じボタンが2回以上押されないようなロジックを書いておけば、サーブレットに対して複数のリクエストが送信されることを防ぐことができます。

■対策3:サーブレット側で2度押しに対応したロジックを作り込む

 同一ページから同じユーザーのリクエストが複数あった場合でも問題が発生しないようなロジックを、サーブレット側に作り込んでおく方法もあります。しかし、こういったロジックの実装には多くの考慮点や検証を必要とする点があり、技術的には対策2の方法より難しいといえます。


「Java Solution FAQ」




Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間