Помогите получить изображение с сервлета на страницу JSP

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

Я не нашел способа сгенерировать изображение с тех пор, как начал искать, как передать изображение из сервлета в JSP, и застрял.

РЕДАКТИРОВАТЬ: страница jsp уже создана и не создана сервлетом, мне нужно передать изображение в уже существующий jsp

Любая помощь приветствуется.


person ChronoXIII    schedule 20.07.2009    source источник


Ответы (4)


Вам нужно записать изображение как массив байтов в выходной поток ответа. Что-то вроде этого:

byte[] imageBytes = getImageAsBytes();

response.setContentType("image/jpeg");
response.setContentLength(imageBytes.length);

response.getOutputStream().write(imageBytes);

Тогда в вашем JSP вы просто используете стандартный элемент img:

<img src="url to your servlet">
person Nick Holt    schedule 20.07.2009
comment
Какой код у меня будет на странице jsp, который будет отображать изображение - person ChronoXIII; 20.07.2009
comment
Что-то вроде ‹img src = url вашего сервлета /› - person Nick Holt; 20.07.2009

Вы не можете 1 вернуть оба в одном ответе, поскольку вы возвращаете разные типы (например, HTML-страницу типа text/html и изображение типа image/jpeg).

Для такого рода вещей я сгенерирую изображение во время первоначального запроса сервлета (для содержащей HTML-страницы). Я сохраняю его в кеше в моем сервлете и пишу HTML-страницу с тегом изображения, содержащим URL-адрес этого изображения с дескриптором.

например браузер запрашивает http://whatever/page

Сервлет генерирует изображение и записывает HTML-тег на странице, например

<img src="http://whatever/image/unique_handle_to_image">

Браузер отобразит HTML-страницу и как часть этого отправит новый запрос моему сервлету с дескриптором изображения.

например теперь браузер запрашивает http://whatever/image/unique_handle_to_image

Затем я возвращаю изображение как тип контента image/jpeg или аналогичный.

Итак, у вас есть два запроса. Один для страницы, на которой вы визуализируете изображение и временно сохраняете его, а второй, на котором вы возвращаете изображение. Вы должны не забыть очистить кеш изображений, но это все просто. Я бы не стал беспокоиться о хранении большого количества изображений, так как два запроса от браузера обычно (!) Приходят быстро один за другим.

  1. Я предполагаю, что можно использовать uri данных, если ваш браузер поддерживает его, и создать что-то вроде

    <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9YGARc5KB0XV+IAAAAddEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIFRoZSBHSU1Q72QlbgAAAF1JREFUGNO9zL0NglAAxPEfdLTs4BZM4DIO4C7OwQg2JoQ9LE1exdlYvBBeZ7jqch9//q1uH4TLzw4d6+ErXMMcXuHWxId3KOETnnXXV6MJpcq2MLaI97CER3N0vr4MkhoXe0rZigAAAABJRU5ErkJggg==" alt="Red dot" />
    

Обратите внимание, что есть ряд предостережений, связанных с этим. См. Страницу по ссылке.

person Brian Agnew    schedule 20.07.2009

Я бы сделал что-то в этом роде, чтобы добиться этого:

На странице JSP вы помещаете ссылку на изображение:

<img src="servlet/path?word=value">the rest</img>

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

Сначала отображается страница JSP, затем запрашиваются все изображения, все должно работать нормально.

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

Надеюсь это поможет.

person Ula Krukar    schedule 20.07.2009

Если я правильно понимаю вашу проблему, последовательность событий будет такой:

  1. Вы создаете HTML-страницу;
  2. Эта HTML-страница отправляется клиенту; и
  3. Браузер клиента считывает URL-адрес изображения и запрашивает его как отдельный запрос.

Итак, вы не можете сгенерировать изображение и передать его в JSP. Однако вы можете создать URL, чтобы получить изображение и поместить его в JSP. Это достаточно просто передать сервлету, поместив его в объект HttpServletRequest (область запроса в JSP). Например, сгенерируйте:

<a href="http://myhost.com/image_servlet?id=1234"/>

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

person cletus    schedule 20.07.2009