Encode de várias imagens no browser através de JSP e Servlet

Olá Pessoal !

Estou começando a desenvolver em Java e já estou enfrentando um problema cabeludo. Se alguém tiver alguma dica ou sugestão , serão muito bem vindas !

A aplicação deve apresentar no browser imagens originalmente do formato TIF. Como não é um formato nativo do I.E. eu converti a imagem para JPG (sem salvar em disco) e já mando para o browser a imagem renderizada (encode) através da biblioteca do JAI em um servlet acessado por um JSP.

Então, a estrutura da minha aplicação está assim:

  1. um arquivo JSP desenha a tela inicial no browser e apresenta um input text.

  2. depois que o usuário coloca o parâmetro, faço um acesso ao banco e leio uma determinada qtde de imagens a serem apresentadas.

  3. Daí no próprio JSP, eu faço um FOR que lê o caminho de cada arquivo conforme a quantidade de imagens. Chamando logo em seguida o servlet que envia a imagem.

Segue o trecho do JSP:

 <%  
                int intI=0;
                int intCont=0;
                if(blnImagem == true){
                    out.println("<br>");
                    out.println("<table border=0 STYLE=border-collapse:collapse>");
                    out.println("<tr>");
                    for(intI=0;intI < Processo.intQtdImagens;intI++){
	       // AQUI EU PEGO O NOME DO ARQUIVO A SER EXIBIDO
                       Imagem.strImgTif = Imagem.IndicarImagem(Processo.strNmPath,Processo.strSubPath,Processo.intNuImagem,intI);                                                                     
                       out.println("<th>");
                       out.println("<table border=1 STYLE=border-collapse:collapse rules='cols'>");
                       out.println("<tr>");
                       out.println("<th>");
                       %>
                         // AQUI EU CHAMO O SERVLET QUE IRÁ ENVIAR O ARQUIVO
                         <img src="ShowImg" WIDTH=100>
                       <%
                       out.println("</th>");
                       out.println("</tr>");
                       out.println("</table>");
%>

e o trecho do Servlet que converte e envia a imagem:

        response.setContentType("image/jpeg");        
        ServletOutputStream sos = response.getOutputStream();
        RenderedOp src = JAI.create("fileload", Imagem.strImgTif);            
        ImageEncoder encoder = ImageCodec.createImageEncoder("JPEG",sos,null);        
        encoder.encode(src);  
        sos.close();

Para uma imagem apenas isso funciona perfeitamente.
Pois é, o problema que estou encontrando é que se eu tenho 10 imagens para apresentar, o FOR é executado 10 vezes e passa 10 nomes de arquivos diferentes, mas
na página apenas a última imagem é apresentada 10 vezes. É como se ele processasse a TAG <IMG SRC= > ao fim de tudo de modo que o valor da variável
estática Imagem.strImgTif fosse lida apenas com o último valor e a mesma imagem carregada 10 vezes.

Como faço para resolver isso ? Alguém tem alguma idéia ?

Obrigado a todos !

Emidio Fidelis

Aqui “img src=“ShowImg” WIDTH=100” você só chama o Servlet que gera a imagem, sem definir para ele qual imagem você quer.

Tente algo assim:

&lt;img src=&quot;ShowImg?img=1&quot; WIDTH=100&gt;

Valeu, Daniel, vc tem razão.

Passei o parâmetro e agora são exibidas quase todas as imagens.

Só que algumas, por algum motivo , não é carregada, aparecendo o X vermelho. Se eu clico com o botão direito e seleciono “Mostrar Imagem” daí a imagem é apresentada. Por que será que acontece isso ?

Abraços !

Cache? Erro na geração?
Precisa ver certinho o motivo.

Valeu , Daniel, vc tem razão.

Agora deu certo ! :lol:

O problema é que não todas as imagens que são exibidas, em alguns lugares aparece o x vermelho e daí preciso clicar com o botão direito e selecionar “Mostra Imagem”. Por que será que acontece isso.

Abraços !

Beleza, vou verificar.

Erro na geração não é, pois a imagem é exibida depois da minha intervenção.

Obrigado pelas dicas !