Recuperar Imagem (blob) - (MySQL + JSF)

Galera, eu tenho uma tabela chamada produtos… ( ID, PRODUTO, IMAGEM )
Consegui fazer o input das informações e da imagem, porem estou tendo dificuldade de recuperar a imagem do banco conforme o Id do produto!
Como posso resolver esse problema sem utilizar Servlets?! :?:
8)Segue o que estou tentando fazer… 8)

PRODUCT.JSP

<f:view>
                <h:outputText value="The Products" /> <h1/>
                <h:dataTable border="1" var="item" value="#{ProductFace.products}" >
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="ID DO PRODUTO"/>
                        </f:facet>
                        <h:outputText value="#{item.id_Product}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="NOME DO PRODUTO"/>
                        </f:facet>
                        <h:outputText value="#{item.nameProduct}"/>
                    </h:column>
                    <h:column>
                        <f:facet name="header">
                            <h:outputText value="IMAGEM"/>
                        </f:facet>
                        <h:graphicImage value="#{item.imagem2}" style="width: 65px; height: 55px;"/>
                    </h:column>
                </h:dataTable>
            </f:view>

ENTIDADE PRODUCT

public class Product implements java.io.Serializable {
    private Integer id_Product;
    private String NameProduct;
    private File imagem; // Input da Imagem no Banco
    private BufferedImage imagem2; // Recupera Imagem do Banco


    public Product() {
    }

    public String getNameProduct() {
        return NameProduct;
    }

    public void setNameProduct(String NameProduct) {
        this.NameProduct = NameProduct;
    }

    public Integer getId_Product() {
        return id_Product;
    }

    public void setId_Product(Integer id_Product) {
        this.id_Product = id_Product;
    }

    public File getImagem() {
        return imagem;
    }

    public void setImagem(File imagem) {
        this.imagem = imagem;
    }

    public BufferedImage getImagem2() {
        return imagem2;
    }

    public void setImagem2(BufferedImage imagem2) {
        this.imagem2 = imagem2;
    }
}

DAO do Produto

import br.com.classes.Connector;
import br.com.classes.Product;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.LinkedList;
import java.util.List;
import java.io.*;
public class ProductDAO extends Connector {
    
   
    public ProductDAO() {
        super();
    }
 
[b]// Aqui está add Imagem[/b]
    public boolean add(Product prod) throws ClassNotFoundException, SQLException, FileNotFoundException, IOException {
        FileInputStream fis = null;
        fis = new FileInputStream(prod.getImagem());
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("INSERT INTO DBAPRENDIZ.PRODUCT (NameProduct, Imagem) values ( ?, ?)");
        ps.setString(1, prod.getNameProduct());
        ps.setBinaryStream(2, fis, (int) prod.getImagem().length());
        int toReturn = ps.executeUpdate();
        ps.close();
        return toReturn > 0;
    }
 
 
 
    public List<Product> getAllProducts() throws ClassNotFoundException, SQLException, IOException {
        List<Product> toReturn = new LinkedList<Product>();
        PreparedStatement ps = (PreparedStatement) getPreparedStatement("SELECT * FROM DBAPRENDIZ.PRODUCT ");
        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            Product prod = new Product();
            popularProd(prod, rs);
            toReturn.add(prod);
        }
        rs.close();
        closeAll();
        return toReturn;
    }
 
    public void popularProd(Product prod, ResultSet rs) throws SQLException, IOException {
        prod.setId_Product(rs.getInt("id_Product"));
        prod.setNameProduct(rs.getString("NameProduct"));
        [b]/// Como Recuperar a Imagem da Base de Dados aqui [/b]
}
}

Dificuldade está sendo na hora de recuperar a imagem da base! :frowning:
Como posso fazer?! :?:
vlw

Você não está salvando os dados da sua imagem, só o tamanho. Com isso, você não conseguirá ler a imagem nunca.

Dá uma lida aqui: http://intelectolivre.blogspot.com/2008/07/exibindo-gravando-e-recuperando-imagens.html

Na base de dados IMAGEM está atribuido como Blob…
Não entendi, como estou gravando somente o tamanho?!

Não, não… está certo, falei besteira. De qualquer forma, siga o link para ver um exemplo funcional.

Alguém sabe como faço pra passar um Id para um Servlet?!?!
Tentei dessa forma…

MUDANÇA NO PRODUCT.JSP

 <h:graphicImage value="DisplayImage?idImagem=#{item.id_Product}" style="width: 65px; height: 55px;"/>

Segue o ServLet…

SERVLET

import java.sql.*;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class DisplayImage extends HttpServlet{
    

    public void doGet(HttpServletRequest request, HttpServletResponse response, int idImagem) throws ServletException, IOException{
	java.sql.Connection con=null;
        Statement st1;
        try{			
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            con = DriverManager.getConnection("jdbc:mysql://10.42.34.135/dbaprendiz?user=danilo.carmo&password=102030");
            st1=con.createStatement();
            ResultSet rs1 = st1.executeQuery("SELECT IMAGEM FROM DBAPRENDIZ.PRODUCT WHERE ID_PRODUCT = '" + idImagem + "'");
            String imgLen = "";
            while(rs1.next()){
                imgLen = rs1.getString("IMAGEM");
                System.out.println(imgLen.length());
                int len = imgLen.length();
                byte [] rb = new byte[len];
                InputStream readImg = rs1.getBinaryStream("IMAGEM");
                int index=readImg.read(rb, 0, len);	
                System.out.println("index----------------"+index);
                response.reset();
                response.setContentType("image/jpg");
                response.getOutputStream().write(rb,0,len);
                response.getOutputStream().flush();
            }
            st1.close();
            response.getOutputStream().close();
       } catch (Exception e){
            e.printStackTrace();
        }
    }
}

Não aparece a imagem!!!
Como posso fazer?!