Ayuda a obtener una imagen de Servlet a la página JSP

Actualmente tengo que generar una imagen que muestra el texto de una cadena, necesito hacer esta imagen en un servlet y luego de alguna manera pasar la imagen a una página JSP para que pueda mostrarla. Intento evitar guardar la imagen y, de alguna forma, transmitir la imagen al 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.

EDITAR: La página jsp ya está hecha y no es creada por el servlet, tengo que pasar la imagen a una jsp ya existente

Cualquier ayuda es apreciada.

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); 

Entonces en tu JSP solo usas un elemento img estándar:

  

No puede devolver 1 en la misma respuesta, ya que está devolviendo tipos diferentes (una página HTML de tipo text/html y una imagen de 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.

por ejemplo, el navegador solicita http://whatever/page

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

  

El navegador mostrará la página HTML y, como parte de ese problema, una nueva solicitud a mi servlet con el identificador de la imagen.

por ejemplo, el navegador ahora solicita http://whatever/image/unique_handle_to_image

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

Entonces tienes dos solicitudes pasando. 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 uri de datos siempre que su navegador lo admita y cree algo así como

     Red dot 

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

Haría algo en esta línea para lograr esto:

En la página JSP, pones un enlace a una imagen:

   el rest  

Este enlace apunta a su servlet, genera una imagen usando los parámetros de solicitud, no necesita guardarla, simplemente la coloca directamente en el flujo de salida de la respuesta. Debe recordar desactivar el almacenamiento en caché del navegador para este servlet.

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

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

Espero que esto ayude.

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

  1. Usted genera 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 puede generar la imagen y pasarla al JSP. Sin embargo, puede generar una URL para obtener la imagen y colocarla 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:

  

Realmente no dice 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.

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