Imprimir byte[] em JSP

3 respostas
B

Galera,

Tenho uma aplicação com Struts e Hibernate. Em certo momento, retorno em torno de 100 registros, tendo que mostrar na mesma tela os seus dados (dentre eles uma imagem que está num campo Blob no banco).

Consigo retornar essa imagem como um array de byte, mas não sei como fazer para imprimir o resultado na tela através do JSP. Alguém tem uma idéia?
Com servlet também não dá pois eu teria que fazer uma busca interna pela imagem para cada registro, o que seria muito custoso ao banco.

Aguardo sugestões.valeu

3 Respostas

D

Olá.

Você já tentou mandar esse array de bytes para um OutPutStream?

servletOutputStream.write(bytes, 0, bytes.length);
B

[quote=Adriano F. Ronszcka]Olá.
Você já tentou mandar esse array de bytes para um OutPutStream?

servletOutputStream.write(bytes, 0, bytes.length);

Tentei sim cara. Vou explicar o que fiz exatamente:

Tenho um JSP que possui um loop para exibir em torno de 100 produtos. Esses produtos precisam mostrar seus dados e sua foto. Para mostrar a foto, em uma parte do código está assim:

<img src="srvltFotoProduto?cod=<%= produto.getCdProduto() %>" width="200" height="200" />

Ou seja: chamo o servlet passando o código do produto.
Então, tenho o servlet chamado srvltFotoProduto que, no método Get, recupera a foto e apresenta a imagem:

Session hc = HibernateConfig.open();
Produto prod = (Produto)hc.get(Produto.class, request.getParameter("cod"));
response.getOutputStream().write(prod.getFoto().getDados());

Blz, o código funciona perfeitamente. O problema é que eu estarei indo mais 100 vezes ao banco, após ter realizado a consulta inicial, pois tenho que buscar no servlet 100 vezes as imagens… deu pra entender?? Isso que não quero que aconteça.

Ou seja: isso está funcionando, mas quero um jeito de melhorar a performance, mas não sei como fazer.

B

Consegui resolver galera! :smiley:
Não sei se ficou da melhor forma possível, mas está funcionando perfeitamente para o que preciso.

Caso alguém tenha problema semelhante, segue o que fiz:

  • No JSP, antes de chamar a tag , eu salvo na sessão (session.setAttribute) o array de bytes;
  • Aí eu coloco a tag chamando o Servlet;
  • No Servlet, através de um objeto HttpSession eu recupero o array de bytes e mostro a imagem como no post acima (response.getOutput…)
  • Por último, ainda no Servlet, limpo o atributo da sessão (session.removeAttribute).

Valeu pela ajuda!

Criado 26 de novembro de 2008
Ultima resposta 26 de nov. de 2008
Respostas 3
Participantes 2