2014-09-01 4 views
0

У меня есть сервлет, который генерирует .png изображение и записывает его в OutputStream в виде массива байтов.Возможно ли вернуть более одного значения из сервлета клиенту?

Я хотел бы создать приложение, которое запускает этот сервлет и загружает сгенерированное изображение. Я также хотел бы измерить, сколько времени занимает сервлет, чтобы сгенерировать изображение, не включая время проверки параметров и т. Д. Я знаю, что это невозможно из приложения на стороне клиента, поэтому сам сервлет должен измерить это время, а затем отправить измеренное значение обратно в клиентское приложение.

Моя проблема: как можно отправить более одного объекта из сервлета: изображение и значение времени?

Должен ли я использовать, например, JSON? Или, если я пишу изображение (как массив байтов) и значение времени (как длинное значение) в OutputStream, как я могу его прочитать на стороне клиента?

ответ

1

Да, мы можем вернуть более одного значения клиенту из HttpServletResponse.

Из версии сервлета 2.2 Сервлеты также получили возможность отправлять несколько значений для одного заголовка ответа, используя методы в HttpServletResponse.

Новое значение addHeader (String name, String value) устанавливает заголовок в заданное значение. Хотя традиционный метод setHeader() заменяет любые существующие значения или значения, addHeader() оставляет текущие настройки самостоятельно и просто устанавливает дополнительное значение. Также есть addIntHeader (имя строки, значение int) и addDateHeader (имя строки, длинная дата).

1

В этом случае вы можете отправить параметр заголовка.

long startTime = System.currentTimeMillis(); 

// Generate the image 

long stopTime = System.currentTimeMillis(); 
long elapsedTime = stopTime - startTime; 
response.setHeader("ElapsedTime", elapsedTime); 
1

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

Но какой клиент прочитает этот поток? Если это программный толстый клиент, вы можете реализовать подобную логику. Но я полагаю, что это будет веб-браузер, который создает HTTP-запрос, потому что это рендеринг HTML с тегом <img>. Но браузер не знает, чтобы получить дополнительные данные.

Если вы используете AJAX для получения изображения, вы можете поместить дополнительные данные в заголовок ответа HTTP, а затем прочитать его значение на стороне клиента.

Смежные вопросы