2009-07-20 5 views
13

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

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

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

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

ответ

30

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

byte[] imageBytes = getImageAsBytes(); 

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

response.getOutputStream().write(imageBytes); 

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

<img src="url to your servlet"> 
+0

Какой код будет у меня на странице JSP, который будет отображать изображение – ChronoXIII

+1

Что-то вроде

1

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

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

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

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

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

7

Вы не можете возвращение как в тот же ответ, так как вы возвращающие разные типы (например, 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. Я предполагаю, что это можно использовать data 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.

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

1
... 
response.setContentType("image/jpeg"); 
response.setContentLength(imageBytes.length); // imageBytes - image in bytes 
response.getOutputStream().write(imageBytes);// 
outStream.flush(); 
outStream.close(); 
Смежные вопросы