サーブレットの基礎知識 |
|
よく、フォームの送信ページなどで「送信ボタンを続けて押さないでください」というコメントを見かけることがあります。これは、フォームの情報を受信して処理を行うページの場合は処理に若干時間がかかるため、ユーザーがこれを正しく送信されていないと勘違いして送信ボタンを何度も押してしまうことがあるからです。
サーブレットでは、あくまでリクエスト単位で処理が起動するので、同じブラウザからの連続したリクエストであっても、別スレッドが起動して処理を行ってしまいます。もし、そのページがオンラインショッピングの決済画面だった場合、送信ボタンを連続して押してしまうと、そのままでは、同じ発注が何度も行われてしまうことになりかねないので、何らかの対策を施す必要があります。
■対策1:ユーザーに2度押しをしないように警告する
これは、技術的な解決方法ではありませんが、2度押しをした場合にユーザーに対してどういう問題が起こるか、また、このリクエストの処理には時間がかかるということをあらかじめユーザーに告知しておくことで、2度押しの行為そのものを減らすという効果はあるでしょう。
■対策2:JavaScriptなどで2度押しを防ぐ
フォームのボタン要素にはonClickという属性があり、これを使うとボタンが押されるたびに決まったJavaScriptを実行させることができます。
JavaScriptで、同じボタンが2回以上押されないようなロジックを書いておけば、サーブレットに対して複数のリクエストが送信されることを防ぐことができます。
■対策3:サーブレット側で2度押しに対応したロジックを作り込む
同一ページから同じユーザーのリクエストが複数あった場合でも問題が発生しないようなロジックを、サーブレット側に作り込んでおく方法もあります。しかし、こういったロジックの実装には多くの考慮点や検証を必要とする点があり、技術的には対策2の方法より難しいといえます。
「Java Solution FAQ」 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|