Помощь в получении изображения с сайта Servlet на JSP

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

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

EDIT: Страница jsp уже создана и не создана сервлетом, я должен передать изображение в уже существующую jsp

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

Ответы

Ответ 1

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

byte[] imageBytes = getImageAsBytes();

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

response.getOutputStream().write(imageBytes);

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

<img src="url to your servlet">

Ответ 2

Вы не можете 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 или аналогичный.

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

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

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

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

Ответ 3

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

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

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

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

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

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

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

Ответ 4

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

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

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

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

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

Ответ 5

...
response.setContentType("image/jpeg");
response.setContentLength(imageBytes.length); // imageBytes - image in bytes
response.getOutputStream().write(imageBytes);// 
outStream.flush();   
outStream.close();