Renderização de imagem depois de salva em banco de dados com Hibernate e Scriptlet

2 respostas
B

Olá pessoal,
A uns meses que estou tentando fazer upload de imagem, salvar no banco de dados POSTGRES e depois renderizar essa imagem na pagina, mas estou com o seguinte problema:
Salvo a imagem, renderizo em uma servlet, mas quando tento redirecionar a pagina e trazer essa imagem para meu formulário, não rola, só erro.
preciso pegar essa imagem renderizada e colocar num formulario… esse é o meu problema. estou usando o hibernate com annotation e pag. jsp dos formulários.

Alguém pode me dá uma força???

2 Respostas

Marcelo_de_Andrade

Põe teu código dentro da tag [ code ] e mostra o erro que está causando.

B

Olá pessoal, me desculpem pois sou novo por aqui…
abaixo segue o codigo de um programa que pega uma imagem e salva em um banco de dados (usado o postgres) e depois recupera essa imagem, e o objetivo de apresentar essa imagem no meu formulário(é o que falta).

Servlet

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

FileItemFactory factory = new DiskFileItemFactory();
ServletFileUpload upload = new ServletFileUpload(factory);
List<FileItem> items = null;

//classe upload
Upload cl = new Upload();
//dao de persistencia
DAOGenerico<Upload> dao = new DAOGenerico<Upload>(cl);


if(ServletFileUpload.isMultipartContent(request)){

try {
items = upload.parseRequest(request);
} catch (FileUploadException ex) {
Logger.getLogger(Upp1.class.getName()).log(Level.SEVERE, null, ex);
System.out.println("erro");
}


Iterator iter = items.iterator();
while (iter.hasNext()) {
FileItem item = (FileItem) iter.next();
if (item.isFormField()) {

}else {
byte[] arquivo = item.get();


cl.setImagem(item.get());
cl.setTamanho(Integer.valueOf((int) item.getSize()));

try {
dao.salvar(cl);

request.setAttribute("msg", "Inserido com sucesso");
} catch (Exception e) {
request.setAttribute("msg", "Erro ao inserir");
}

RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}
}//fim do while
}else{

Integer id = Integer.valueOf(request.getParameter("id"));
Upload.execute(id, request, response);

RequestDispatcher rd = request.getRequestDispatcher("index.jsp");
rd.forward(request, response);
}

Classe Upload com o metodo de renderização da imagem

@Entity
@Table(name="upload",schema="public")
@SequenceGenerator(name = "up", sequenceName = "up",allocationSize=0, initialValue=4)
public class Upload implements java.io.Serializable {


private int id;
private byte[] imagem;
private Integer tamanho;

public Upload() {
}


public Upload(int id) {
this.id = id;
}
public Upload(int id, byte[] imagem, Integer tamanho) {
this.id = id;
this.imagem = imagem;
this.tamanho = tamanho;
}

//metodo de renderização da imagem

public static void execute(Integer id, HttpServletRequest request, HttpServletResponse response) throws IOException{

Upload up = new Upload();
DAOGenerico<Upload> dao = new DAOGenerico<Upload>(up);

up = dao.listar_id("Upload", id );

if(up.getImagem() != null){
response.setContentType("image/jpeg");

response.setContentLength(up.getImagem().length);
ServletOutputStream outputStream = response.getOutputStream();

outputStream.write(up.getImagem());
outputStream.flush();
outputStream.close();
}
}


@Id

@Column(name="id", unique=true, nullable=false)
@GeneratedValue(generator="up",strategy=GenerationType.SEQUENCE)
public int getId() {
return this.id;
}

public void setId(int id) {
this.id = id;
}

@Column(name="imagem")
@Lob
public byte[] getImagem() {
return this.imagem;
}

public void setImagem(byte[] imagem) {
this.imagem = imagem;
}

@Column(name="tamanho")
public Integer getTamanho() {
return this.tamanho;
}

public void setTamanho(Integer tamanho) {
this.tamanho = tamanho;
}




}

DAO generico

public class DAOGenerico<T> {

private final Session session;
private T classe;
Transaction transacao = null;


public DAOGenerico(T classe) {
this.classe = classe;
this.session = HibernateUtil.getsf();
}


public void salvar(T bean) {
try{
transacao = session.beginTransaction();

session.save(bean);
transacao.commit();
}catch(HibernateException e){
transacao.rollback();
System.out.println("erro ao inserir." +e);
}
}

public T listar_id(String classe, Integer identificador) {
T bean = (T) session.createQuery("from "+ classe + " where id = "+ identificador ).uniqueResult();
return bean;
}
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlnssi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>Uploads</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<servlet>
<description></description>
<display-name>Upp</display-name>
<servlet-name>Upp</servlet-name>
<servlet-class>br.edu.control.Upp1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Upp</servlet-name>
<url-pattern>/Upp</url-pattern>
</servlet-mapping>
</web-app>

index.jsp

<%@page import="br.edu.model.Upload"%>
<%@page import="br.edu.DAO.DAOGenerico"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Exemplo Upload</title>
</head>
<body>

<h2><% if(request.getParameter("msg") != null)out.print(request.getParameter("msg")); %></h2>
<form name="<% out.print(String.valueOf("id")); %>" action="Upp" method="post" enctype="multipart/form-data">

<input type="hidden" name="opcao" value="1">
<label>Selecione:</label>
<input type="file" name="file" id="filechoose" />
<input type="submit" />
</form>


<form name="buscarimagem" action"Upp" method="post">
<input type="hidden" name="opcao" value="2">

<input type="text" name="img_id" />
<input type="submit" />
</form>

<!-- aqui é que era para aparecer a imagem --!>
<img name"img" alt="" src="http://localhost:8080/Upp">

</body>
</html>

O objetivo é pegar a imagem renderizada (já faz isso) e colocar no meu formulário.

o erro: não consegue redirecionar depois de renderizar.

07/09/2012 12:38:58 org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet Upp threw exception
java.lang.IllegalStateException: Cannot forward after response has been committed
	at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:312)
	at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
	at br.edu.fajesu.control.Upp1.doPost(Upp1.java:109)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Thread.java:662)
07/09/2012 12:42:56 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/Uploads] has started
07/09/2012 12:42:56 org.apache.catalina.loader.WebappClassLoader clearReferencesJdbc
GRAVE: The web application [/Uploads] registered the JDBC driver [org.postgresql.Driver] but failed to unregister it when the web application was stopped. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.
07/09/2012 12:43:06 org.apache.catalina.core.StandardContext reload
INFO: Reloading Context with name [/Uploads] has started
Criado 9 de setembro de 2012
Ultima resposta 9 de set. de 2012
Respostas 2
Participantes 2