Foros del Web » Programación para mayores de 30 ;) » Java »

Servlets y applets

Estas en el tema de Servlets y applets en el foro de Java en Foros del Web. Hola foreros/as: Estoy desarrollando un servlet y me gustaría que la página web que construyo, tuviese una imagen que extraigo de una base de datos ...
  #1 (permalink)  
Antiguo 10/02/2004, 11:41
 
Fecha de Ingreso: noviembre-2002
Mensajes: 65
Antigüedad: 21 años, 6 meses
Puntos: 0
Servlets y applets

Hola foreros/as:
Estoy desarrollando un servlet y me gustaría que la página web que construyo, tuviese una imagen que extraigo de una base de datos MySQL. Bueno, la BBDD es lo de menos. Lo que sí está claro es que no quiero guardar la imagen en disco porque se me complicaría demasiado.
Por lo tanto mi pregunta es si sabéis como puedo afrontar el problema. ¿Hay alguna forma de construir dicha imagen en el servlet desde un flujo de salida de la BBDD?
Se me ha ocurrido que tal vez podría meter un applet dentro de un servlet para dibujar la imagen, pero no sé como hacerlo.
¿Se os ocurre algo?
Muchas gracias a todos.
  #2 (permalink)  
Antiguo 10/02/2004, 12:34
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Naaa, olvidate del applet :).

Lo más fácil y portable es escribir un servlet que coja la imagen directamente de la BDD y la devuelva como un stream, poniendo el tipo de contenido (content-type) adecuado.

Suponiendo que ya sabes como obtener el flujo (Stream) de la base de datos, lo unico que has de hacer, previo poner correctamente el content-type, es escribir lo que lees de ese flujo en el flujo de respuesta (reponse.getOutputStream si no me falla la memoria) del servlet.

Despues llamas al servlet desde el atributo SRC del tag IMG y listo. Algo asi como
<IMG SRC="http://miservidor/miServlet?etc-etc" ...

Suerte!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
  #3 (permalink)  
Antiguo 11/02/2004, 07:12
 
Fecha de Ingreso: noviembre-2002
Mensajes: 65
Antigüedad: 21 años, 6 meses
Puntos: 0
He realizado lo siguiente, pero no me funciona:
Código PHP:
protected void doGet (HttpServletRequest reqHttpServletResponse res)
    
throws ServletExceptionIOException {
    
moduloSQLSyb2 sql = new moduloSQLSyb2();
    
sql.conexion();
    
String nomImagen "01020304050607080922";
                           
    
ResultSet rs null;
    try {
    
rs sql.obtenStreamImg  (nomImagen);
    if (
rs != null){
    
rs.next();
    
    
// Se lee el contenido de la imagen devuelta
    
InputStream is rs.getBinaryStream ("datosimg");
    
byte b[] = new byte[32000];
    
int c is.read(b);
    
System.out.println ("Bytes leídos con éxito: " c);    
    
PrintWriter out res.getWriter ();
    
res.setContentType ("image/gif");

    
out.println (b);
    }
    else {
    
System.out.println ("ResultSet devuelve nulo");
    }
    } catch (
SQLException e){e.printStackTrace();}
     catch (
IOException e){e.printStackTrace();}        } 
  #4 (permalink)  
Antiguo 11/02/2004, 12:49
 
Fecha de Ingreso: octubre-2003
Mensajes: 3.578
Antigüedad: 20 años, 7 meses
Puntos: 51
Hola,

Tendrías que revisar los conceptos de leer streams, ya que la forma que muestras no es la correcta.
Así estas leyendo una sola "ristra" de bytes de como mucho 32K, y estas escribiendo el buffer de 32K completo.

O sea que si tu imagen no ocupa exactamente 32000 bytes, es normal que no funcione.

Lo correcto seria leer del InputStream trozo a trozo hasta que se acabe el contenido, e ir escribiendo al mismo tiempo esos trozos, simplemente escribiendo los bytes que te han devuelto, ni mas, ni menos.

Y si usas BufferedInputStreamReader, mejor.

Suerte!
__________________
Para obtener respuestas, pregunta de forma inteligente o si no, pregunta lo que quieras que yo contestaré lo que me dé la gana.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:39.