2009-07-20 47 views
13

Actualmente tengo que generar una imagen que muestre el texto de una cadena, necesito hacer esta imagen en un servlet y luego pasar la imagen a una página JSP para que pueda mostrar eso. Intento evitar guardar la imagen y, de alguna forma, transmitir la imagen al JSP.Ayuda para obtener la imagen de Servlet a la página JSP

No he encontrado una manera de generar la imagen desde que comencé a encontrar cómo pasar una imagen del Servlet al JSP y me quedé atascado.

EDIT: la página JSP ya está hecha y no es creada por el servlet, tengo que pasar la imagen en un JSP ya existente

Cualquier ayuda se agradece.

Respuesta

30

Debe escribir la imagen como una matriz de bytes en la secuencia de salida de la respuesta. Algo como esto:

byte[] imageBytes = getImageAsBytes(); 

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

response.getOutputStream().write(imageBytes); 

Luego, en que JSP sólo tiene que utilizar un elemento estándar img:

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

¿Qué código tendría yo en la página JSP que mostrará la imagen Algo – ChronoXIII

+1

como

1

Si entiendo su problema correctamente, la secuencia de eventos será:

  1. a generar una página HTML;
  2. Esa página HTML se envía al cliente; y
  3. El navegador del cliente lee la URL de la imagen y la solicita como una solicitud por separado.

Por lo tanto, no se puede generar la imageny pasarlo a la JSP. Sin embargo, puede generar un URL para obtener la imagen y ponerla en el JSP. Es bastante fácil pasar por el servlet poniéndolo en el objeto HttpServletRequest (ámbito de solicitud en JSP). Por ejemplo, generar:

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

No dice realmente qué es ese texto ni qué información se necesita para generar la imagen. Si no puede encapsular eso en una URL GET, puede que necesite agregar información adicional y colocarla en HttpSession para que pueda ser recuperada en la siguiente solicitud de obtención de imágenes.

7

Usted no puede rendimiento tanto en la misma respuesta, ya que eres devolver diferentes tipos (una página HTML del tipo text/html y una imagen del tipo image/jpeg, por ejemplo).

Para este tipo de cosas, generaré la imagen durante la solicitud de servlet inicial (para la página HTML que contiene). Lo almaceno en un caché en mi servlet, y escribo la página HTML con la etiqueta de imagen que contiene una URL a esa imagen con el asa.

p. Ej. el navegador pide http://whatever/page

El servlet genera la imagen, y escribe una etiqueta HTML en la página como

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

El navegador hará que la página HTML, y como parte de esa cuestión una nueva solicitud a mi servlet con el mango de la imagen.

p. Ej. el navegador ahora solicita http://whatever/image/unique_handle_to_image

Devuelvo la imagen como tipo de contenido image/jpeg o similar.

Tienes dos solicitudes en curso. Uno para la página, en el que renderiza la imagen y la almacena temporalmente, y la segunda en la que devuelve la imagen. Debes recordar borrar la memoria caché de la imagen, pero eso es muy sencillo. No me preocuparía almacenar muchas imágenes, ya que las dos solicitudes del navegador generalmente (!) Vienen en rápida sucesión.

  1. supongo que es posible utilizar un data uri proporcionan su navegador lo soporta, y crear algo así como

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

en cuenta que hay una serie de advertencias que rodean estos. Ver la página enlazada.

3

me gustaría hacer algo a lo largo de estas líneas para lograrlo:

En la página JSP se pone un enlace a una imagen:

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

Este enlace apunta a nuestro servlet, se genera una imagen usando solicitud parámetros, no es necesario que lo guarde, simplemente colóquelo directamente en la secuencia de salida de la respuesta. Debe recordar desactivar el almacenamiento en caché del navegador para este servlet.

Primero se muestra la página JSP, a continuación se solicitan todas las imágenes, debería funcionar bien.

Por supuesto, no debe poner el texto para visualizar en un parámetro como este, debe cifrarlo de alguna forma o almacenarlo en una sesión HTTP.

Espero que esto ayude.

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