остановить doGet / допост в сервлетах Java? - PullRequest
1 голос
/ 15 марта 2010

Я немного поигрался с сервлетами Java и Ajax, и у меня есть ситуация, в которой я был бы очень признателен за совет.

Допустим, у меня есть HTML-страница с кнопками «Пуск» и «Стоп», и в результате нажатия кнопки «Пуск»
В сервлете вызывается переопределенный метод doGet (или doPost), который вычисляет что-то, что занимает много времени. (например, гигантский цикл или даже бесконечный цикл не имеет значения, здесь меня интересуют концепции).

Итак, я вас спрашиваю:

1.Что бы я мог убить / закрыть / остановить / выйти doGet метод, когда я нажимаю кнопку остановки на веб-странице? Я здесь использую многопоточность, или есть более простой способ? Я так понимаю, что использование выхода из системы - не очень хорошая идея, верно? ;)

2. Итак, допустим, я реализую код для остановки метода doGet. Что произойдет, если я нажму кнопку «Пуск» в одном браузере (например, в режиме IE), и пока вычисление происходит, откройте новую вкладку или другой браузер (например, Firefox) и откройте тот же URL и ударил стоп? Остановит ли это мои оригинальные вычисления? Есть ли простой способ избежать этого?

Я знаю, что вопросы немного устарели, так как я только начинаю с серверной стороны. :)

Любые предложения будут с благодарностью!

Ответы [ 2 ]

2 голосов
/ 15 марта 2010

ваш обработчик остановки может установить флаг в контексте сеанса, который длительный поток будет периодически проверять и при необходимости завершать.

Вы можете избежать проблем с несколькими браузерами, генерируя уникальный идентификатор задачи при каждой загрузке страницы. тогда вы можете только запустить или остановить определенную задачу. этот идентификатор может быть ключевым в сеансе.

0 голосов
/ 15 марта 2010

Я думаю, вам нужен какой-то новый процесс, запущенный после отправки запроса, и этот процесс должен отвечать на ответы во время выполнения (показывая прогресс, например, через AJAX). Также он должен проверить, есть ли новый запрос с командой остановки. Страница должна быть AJAX с кнопкой прогресса / результата / остановки.

...