Como colocar uma imagem de um SERVLET no JSP?

9 respostas
A

Bom dia Galera. :smiley:
Antes de mais nada, HJ É SEXTAAA … Dia de bebemorar a semana!! 8)
iiuupppp

Bom, na verdade esse post é consequencia da discução desse outro ( http://www.guj.com.br/forum/viewtopic.php?t=13909 ).

:arrow: Seguindo a dica do Vegetto, criei a seguinte Servlet “grafico_teste”.

protected void processRequest(HttpServletRequest request, HttpServletResponse response) 
    throws ServletException, IOException { 

        response.setContentType("image/png");          

        int[] valores = { 20, 10, 60, 90, 90, 90 }; 
        PieChart pie = new PieChart( valores, 200, 200, Color.WHITE ); 

        OutputStream os = response.getOutputStream(); 

        ImageIO.write(pie.getBufferedImage(), "png", os); 

        os.close(); 

    }

:arrow: Dai criei um jsp cujo eu quero que apareça a imagem Pizza. “temp.jsp”

<%@page session="true" %> 

<jsp:include page="cabecalho.jsp" flush="true" /> 

<br> André <br> 
<img scr="/servlet/grafico_teste" /> 
<br> 
<jsp:include page="rodape.jsp" flush="true" />

:arrow: Se eu executar a url colocando o endereço do servlet, vai aparecer a figura corretamente. Porém …
:arrow: Executando o JSP(temp.jsp), cujo eu quero que apareça a imagem, não aparece e não dá erro.

:?: O que eu fiz de errado ? :?: Alguém poderia me ajudar …

Obrigado ao help de todos. 8)

9 Respostas

A

Veja sua resposta no outro tópico:
http://www.guj.com.br/forum/viewtopic.php?t=13909&highlight=

A

Sim sim … Eu defini sim …

...
  <servlet>
    <servlet-name>grafico_teste</servlet-name>
    <servlet-class>logus.grafico_teste</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>grafico_teste</servlet-name>
    <url-pattern>/servlet/logus.grafico_teste</url-pattern>
  </servlet-mapping>
  ...

Acontece como eu escrevi acima, se eu colocar na url o endereço do servlet, funciona, aparece a imagem.
Mas se eu colocar o endereço do JSP, não aparece a imagem !!! :ó(

Tem alguma idéia ??? :cry:

Desde ja agradeço …

D
<img scr="/servlet/grafico_teste" />

não seria o atributo src escrito errado?

<img src="/servlet/grafico_teste" />
danieldestro

não é /servlet/grafico_teste, mas sim servlet/grafico_teste, sem a barra inicial. Isso é válido se seu JSP estiver no root da sua aplicação.

Senão, faz assim:

/suaAplicacao/servlet/grafico_teste

A

“andrejs”:
Sim sim … Eu defini sim …

...
  <servlet>
    <servlet-name>grafico_teste</servlet-name>
    <servlet-class>logus.grafico_teste</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>grafico_teste</servlet-name>
    <url-pattern>/servlet/logus.grafico_teste</url-pattern>
  </servlet-mapping>
  ...

Acontece como eu escrevi acima, se eu colocar na url o endereço do servlet, funciona, aparece a imagem.
Mas se eu colocar o endereço do JSP, não aparece a imagem !!! :ó(

Tem alguma idéia ??? :cry:

Desde ja agradeço …

Acho que não está correta a url-pattern, coloque assim e veja se funciona:

<url-pattern>/servlet/grafico_teste</url-pattern>
danieldestro

eeheheheh… foram 3 erros em 1.

A

:smiley:
Galera … Putz … Deu certim … To Felix pakas … ainda mais que deu certim e hj é sexta feira … Tudo de bom hj. Só falta minha gatinha aceitar sair na balada hj … hehehe …

Bom, Vou colocar todo o fonte aqui pra ver como ficou tudo.
Só adiantando.
Dharis: Vc esta correto, eu havia escrito errado e não tinha visto. :oops:
danieldestro: Vc tbém estava correto, só com pequeno detalhe, observe que no web.xml o url-pattern esta com /servlet/logus.grafico_teste.

OK! Deu certo.
Muito obrigado a todos !!! :smiley:

Segue todo o fonte abaixo. É extenso.
:arrow: Vale lembrar que esse exemplo de criar a imagem, eu peguei aqui no GUJ lá em Artigos. 8)

:arrow: Classe que gera a Imagem Pizza. (PieChat.java)

package logus;

import javax.swing.*;
import java.awt.*;
import java.awt.image.*;

public class PieChart {
    
    //guarda os valores a serem exibidos no gráfico
    private int[] values;
    //guarda o buffer da imagem desenhada
    private BufferedImage imageBuffer;
    //guarda a cor de fundo
    private Color background;
    //guardam as dimensões da imagem
    private int width, height;
    //cores para os pedaços do gráfico
    private Color[] colors = { Color.BLUE, Color.GREEN, Color.RED,
                                Color.YELLOW, Color.ORANGE, Color.PINK,
                                Color.MAGENTA, Color.LIGHT_GRAY, Color.GRAY,
                                Color.BLACK };
    
    /**
     * Cria um objeto da classe que gera um gráfico em pizza.
     * @param values Array de valores inteiros a serem representados.
     * @param width Largura da imagem.
     * @param height Altura da imagem.
     * @param background Cor de fundo da imagem.
     */
    public PieChart( int[] values, int width, int height, Color background ) {
        if( values==null || values.length<1 ||
            width<0 || height<0 ||
            background==null ) throw new IllegalArgumentException();
        this.values = values;
        this.width = width;
        this.height = height;
        this.background = background;
        createChart();
    }
    
    /**
     * Cria a imagem internamente.
     */
    private void createChart() {
        imageBuffer = new BufferedImage( width, height, BufferedImage.TYPE_INT_RGB );
        Graphics g = imageBuffer.createGraphics();
        g.setColor( background );
        g.fillRect( 0, 0, width, height );
        int arc = 0;
        int[] sizes = calculateAngles( values );
        for(int i=0, j=0; i<sizes.length; i++, j++) {
            if( j==10 ) j = 0;
            g.setColor( colors[j] );
            g.fillArc( 0, 0, width, height, arc, sizes[i] );
            arc += sizes[i];
        }
    }
    
    /**
     * Calcula os ângulos para cada valor informado.
     * @param values Valores a terem seus ângulos calculados.
     * @return Array de int com os ângulos para cada valor.
     */
    private int[] calculateAngles( int[] values ) {
        int[] angles = new int[ values.length ];
        int total = 0;
        //calcula a somatória total dos valores
        for( int i=0; i<values.length; i++ ) {
            total += values[i];
        }
        //calcula os ângulos para cada pedaço
        for( int i=0; i<values.length; i++ ) {
            angles[i] = (360 * values[i]) / total;
        }
        return angles;
    }
    
    /**
     * Retorna a imagem do gráfico em pizza.
     * @return Retorna um objeto do tipo ImageIcon.
     */
    public ImageIcon getImageIcon() {
        return new ImageIcon( imageBuffer );
    }
    
    /**
     * Retorna o buffer da imagem do gráfico em pizza.
     * @return Retorna um objeto do tipo BufferedImage.
     */
    public BufferedImage getBufferedImage() {
        return imageBuffer;
    }
}

:arrow: Aqui o Servlet que gera a Imagem. ( grafico_teste )

package logus;

import java.io.*;
import java.net.*;

import javax.servlet.*;
import javax.servlet.http.*;

import logus.PieChart;
import javax.imageio.ImageIO;
import java.awt.Color;
import java.io.OutputStream;

public class grafico_teste extends HttpServlet {
    
    public void init(ServletConfig config) throws ServletException {
        super.init(config);
    }
    
    public void destroy() {
    }
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("image/jpeg");         
        int[] valores = { 20, 10, 60, 90, 90, 90 }; 
        PieChart pie = new PieChart( valores, 200, 200, Color.WHITE ); 
        OutputStream os = response.getOutputStream(); 
        ImageIO.write(pie.getBufferedImage(), "jpeg", os); 
        os.close();
        /*
         *Cria a imagem fisicamente
        ImageIO.write( pie.getBufferedImage(), "jpeg", new File("/temp/img.jpeg") );
         */        
    }
    
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
    
}

:arrow: E finalmente o JSP ( temp.jsp )

<%@ page language="java" %> 

<%@page session="true" %> 

<br> TESTE<br> 
<img src="servlet/logus.grafico_teste" />
<br>

Novamente Obrigado a todos … :smiley:

danieldestro

Faltou meu Copyright no fonte do PieChart… heheehehhehehe :slight_smile:

A

ooooppsss … Desculpe Daniel … :smiley:
Realmente faltou o Copyright .
Mas eu disse que eu peguei no menu Artigos. 8)

Valewwwwwwww 8)

Criado 16 de julho de 2004
Ultima resposta 16 de jul. de 2004
Respostas 9
Participantes 4