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