Classes de Manipulação de Imagem:JSP - Parte 2

Veja neste artigo a construção da nossas classes de manipulação de imagens com Servlets exclusivos.

…Continuando  nosso artigo como Trabalhar com fotos em Java

Vamos criar nossa classe de manipulação de imagens, mas antes é necessário saber que, quando o nosso usuário for acessar nossa aplicação, e inserir uma imagem no banco de dados, internamente o sistema executará um servlet, que será responsável por fazer um upload dessa imagem para o nosso servidor de aplicação.

Para realização do Upload, usaremos o componente <ice:inputFile>, do framewok IceFaces e para isso devemos configurar um ManagedBean em nosso arquivo de contexto faces-config.xml, da seguinte maneira:

<faces-config version="1.2"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-facesconfig_1_2.xsd">

<managed-bean>

<managed-bean-name>uploadMB</managed-bean-name>

<managed-bean-class>com.ManageBean.UploadMB</managed-bean-class>

<managed-bean-scope>session</managed-bean-scope>

</managed-bean>

</faces-config>

Caso não tenha o framework instalado acesse: http://www.icefaces.org/main/downloads/

UPLOAD

Nossa página de visualização de upload(a que o usuário estará vendo ao desejar inserir uma imagem no servidor), será assim:

<f:view>

<html>

<head>

<title>Inserindo foto</title>

</head>

<body>

<center>

<ice:form id="form1">

<ice:panelGrid>

<font face="Arial" color="Black">

<ice:outputText value="Clique *Procurar* para encontrar a foto desejada e depois *Enviar* " />

  </font>

<br/>

<ice:inputFile id="inputFileComponent" file="#{uploadMB.arquivo}" uniqueFolder="false" label="Enviar"

action="#{uploadMB.gravarImagem}"

/>

<br/>

<ice:message for="inputFileComponent"/> <br/>

<font color="red" face="Arial" >

<ice:outputText value="#{uploadMB.caminho}" />

</font>

</ice:panelGrid>

</ice:form>

<ice:form id="form2">

<ice:panelGroup styleClass="componentBox"

xmlns:h="http://java.sun.com/jsf/html"

xmlns:f="http://java.sun.com/jsf/core"

xmlns:ice="http://www.icesoft.com/icefaces/component">

<!-- display of all connnection status icons for -->

<ice:panelGroup styleClass="exampleBox centerBox outputConnectionStatus" >

</ice:panelGroup>

</ice:panelGroup>

</ice:form>

</center>

</body>

</html>

</f:view>

Quanto a classe de upload, implementada no servlet acima( upload.gravarImagem...), será descrita assim:

package com.ManageBean;

import java.io.File;

/**

 *

 * @author Carlos Mazzi

 */

public class UploadMB {

private Integer codBen;

private File arquivo;

private String caminho;

private boolean  status;

private GravarImagem gravarImagem;

 

public UploadMB()

{

setStatus(false);

  gravarImagem = new GravarImagem();

}

 

public boolean isStatus() {

return status;

}

 

public void setStatus(boolean status) {

this.status = status;

}

public File getArquivo() {

return arquivo;

}

public void setArquivo(File arquivo) {

this.arquivo = arquivo;

caminho = arquivo.getPath()+ 

"...Enviado com Sucesso!";

setStatus(false);

}

public String getCaminho(){

setStatus(true);

return caminho;

    }

public GravarImagem getGravarImagem() {

return gravarImagem;

}

public void setGravarImagem(GravarImagem gravarImagem) {

this.gravarImagem = gravarImagem;

}

public void gravarImagem(){

this.codBen = Uploader.auxCodigo;

 

this.gravarImagem.GravarImagem(this.codBen, this.arquivo);

}

DOWNLOAD

E por fim nossa Classe que recuperará uma imagem no banco de dados  será assim:

package Servlets;

import java.io.*;

import java.net.*;

import java.sql.SQLException;

import javax.servlet.*;

import javax.servlet.http.*;

/**

 *

 * @author Carlos Mazzi

 */

public class DownloadServletBlob extends HttpServlet {

protected void processRequest(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException, SQLException {

response.setContentType("text/html;charset=UTF-8");

 

ServletOutputStream out = response.getOutputStream();

String cod = request.getParameter("id");

String Tela = request.getParameter("Tela");

int id;

if (cod == null || cod.equals("")) {

id = 0;

} else {

id = Integer.parseInt(cod);

}

if (id == 0) {

try {

byte[] blob = new BlobManager().consultarConfSistema();

 

if (blob != null) {

out.write(blob);

out.flush();

out.close();

}

 

} finally {

out.close();

}

} else {

if (Tela == null || Tela.equals("")) {

try {

byte[] blob = new BlobManager().consultar(id);

 

if (blob != null) {

out.write(blob);

out.flush();

out.close();

}

 

} finally {

out.close();

}

} finally {

out.close();

}

}

}

}

// <editor-fold defaultstate="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">

/**

* Handles the HTTP <code>GET</code> method.

* @param request servlet request

* @param response servlet response

 */

protected void doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

try {

processRequest(request, response);

} catch (SQLException ex) {

ex.printStackTrace();

}

 

}

 

/**

* Handles the HTTP <code>POST</code> method.

* @param request servlet request

* @param response servlet response

*/

protected void doPost(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

try {

processRequest(request, response);

} catch (SQLException ex) {

ex.printStackTrace();

} }

 

/**

* Returns a short description of the servlet.

*/

public String getServletInfo() {

return "Short description";

}

// </editor-fold>

}

O fator preponderante aqui é a transição byte a byte que essa classe faz para recuperar uma imagem no banco de dados. Tanto para o armazenamento quanto para sua recuperação, ou seja, trata-se de um processo de download e upload do servidor para o cliente, vice-versa.

Pronto... agora é só apresentar para a camada do cliente em uma tela .jsp comum, segue o exemplo:

<div align="center"><img src="DownloadServletBlob?id=<%=Codigo%>" width="118" height="106"/> <br>

Onde DownloadServletBlob, trata-se da nossa classe de download(servidor->cliente) e o parâmetro código para trazer sua imagem do seu banco de dados de acordo com a sua SQL

Por enquanto ficamos por aqui


Um Abraços

Carlos Eduardo

Artigos relacionados