Сервлет Java EE для создания файла и демонстрации прогресса при его создании - PullRequest
0 голосов
/ 24 октября 2009

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

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

1 Ответ

2 голосов
/ 24 октября 2009

Есть два принципиально разных подхода. Одним из них является истинная асинхронная доставка с использованием такого подхода, как Comet. Вы можете увидеть некоторые описания в статьях, таких как this. Я бы использовал этот подход, когда данные, которые вы предоставляете, являются естественно инкрементными - например, измерения в реальном времени от измерительных приборов. Некоторые серверы приложений Java имеют хорошую интеграцию между системами сообщений JMS и кометами в браузере.

Другой подход заключается в том, что у вас есть механизм опроса. JavaScript в браузере периодически вызывает сервер, чтобы получить статус (и, возможно, следующую порцию данных). Преимущество этого подхода состоит в том, что вы используете очень стандартную модель программирования, меньше новых вещей для изучения. Во многих случаях, например, «есть ли новые ответы на вопрос переполнения стека, над которым я работаю?» этого вполне достаточно.

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

Если вы запускаете длительный запрос от сервлета, вполне вероятно, что вы будете эффективно раскручивать рабочий поток для выполнения этой работы. (Может быть, с использованием JMS, может быть, с использованием асинхронных рабочих) и немедленно верните браузеру ответ «Я понял». Это гарантирует, что вы не уязвимы и время ожидания ответа Http. Проблема в том, как определить текущий прогресс. Если у «работника», выполняющего работу, нет способа сообщить о ее частичном прогрессе, вам нечего сказать. Такие вещи имеют тенденцию быть очень специфичными для приложения. Некоторые задачи вполне естественно имеют точки прогресса (рассмотрим печать, мы знаем, сколько страниц нужно сделать и сколько напечатано), другие не имеют (рассмотрите возможность определения, является ли число простым - да или нет, возможно, никаких полезных промежуточных этапов)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...