Сервлеты. Запрет повторного ввода данных.
Сервлет А выдает пользователю форму для ввода определенных данных. Пользователь вводит данные, нажимает на кнопку и данные отправляются на сервер, в сервлет Б.
Сервлет Б обрабатывает данные и вычисляет некий результат и выводит их на страницу.
Как сделать так, чтобы пользователь после того, как ввел данные и попал на страницу с результатом, не смог нажать на стрелочку <- в браузере и заново ввести данные и отправить на сервер?
Не вводить данные повторно - сохранять где-то флажок о том, что данные уже введены. Например, в сессии. Или в базе. Или в файле. Как в голову стукнет :)
Вот в asp.net например можно это сделать так: if(isPostBack){...} в классе странице....а что-то наподобие здесь сделать можно? или это уже к JSP вопросы ?
Это один из фундаментальных принципов экстремального программирования.
По сабжу.
Можно предложить пару вариантов навскидку.
Тот факт, отправлял до этого пользователь данные нужно хранить на сервере, как атрибут сессии, чтобы пользователь не имел к нему доступа, куки тут не сработают.
В яваскрипте на странице устанавливается по дефолту кнопка в состояние disabled. Затем посылается асинхронный запрос к серверу, который проверяет состояние флага, и по нему включает или не включает кнопку. Минут в том, что пользователь может вырубить в браузере яваскрипты вообще.
Тогда остается только опять-таки храня данные как атрибут сессии, делать проверку в самом сервлете, после сабмита. И если там попытка хакнуть, то посылать пользователя редиректом на какую-нибудь error-page.
Да да да, всем спасибо. Сделал через атрибут сессии.