Problemas com upload no jsp

Estou tentando fazer o upload de uma imagem, mas sem sucesso, abaixo segue o código e o erro.

<form action="produto" method="POST" enctype="multipart/form-data"> Nome: <input type="text" name="nome"/> <br/> Descrição: <input type="text" name="descricao"/> <br/> Foto: <input type="file" name="foto"/> <br/> <input type="submit" value="Salvar"/> </form>

servelet

[code]
Usuario usuario = new Usuario();
UsuarioDAO usuarioDAO = new UsuarioDAO();

    String nome = request.getParameter("nome");
    usuario.setLogin(nome);
    String descricao = request.getParameter("descricao");
    usuario.setSenha(descricao);

    FileItemFactory factory =  new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
        List items = upload.parseRequest(request);
        Iterator it = items.iterator();
        while(it.hasNext()) {
            FileItem item = (FileItem) it.next();
            if (item.isFormField()) {  //Aqui ele verifica se é um field do seu form
                String name = item.getFieldName();
                String value = item.getString();
            }
        }
    } catch (FileUploadException ex) {
        Logger.getLogger(produtoController.class.getName()).log(Level.SEVERE, null, ex);
    }[/code]

Antes de tentar fazer o upload eu tentei salvar apenas o nome e descrição e funcionou, agora debuguei e percebi que as variáveis nome e descrição estão vindo como null também, não entendi o que o upload interfere nelas :?

Descobri que o que fazia as variáveis ficarem vazias era o ENCTYPE do form, mas porque eu naum entendi, pois onde pesquisei falaram para colocar o ENCTYPE para fazer o upload.

[quote=EHS]Estou tentando fazer o upload de uma imagem, mas sem sucesso, abaixo segue o código e o erro.

<form action="produto" method="POST" enctype="multipart/form-data"> Nome: <input type="text" name="nome"/> <br/> Descrição: <input type="text" name="descricao"/> <br/> Foto: <input type="file" name="foto"/> <br/> <input type="submit" value="Salvar"/> </form>

servelet

[code]
Usuario usuario = new Usuario();
UsuarioDAO usuarioDAO = new UsuarioDAO();

    String nome = request.getParameter("nome");
    usuario.setLogin(nome);
    String descricao = request.getParameter("descricao");
    usuario.setSenha(descricao);

    FileItemFactory factory =  new DiskFileItemFactory();
    ServletFileUpload upload = new ServletFileUpload(factory);
    try {
        List items = upload.parseRequest(request);
        Iterator it = items.iterator();
        while(it.hasNext()) {
            FileItem item = (FileItem) it.next();
            if (item.isFormField()) {  //Aqui ele verifica se é um field do seu form
                String name = item.getFieldName();
                String value = item.getString();
            }
        }
    } catch (FileUploadException ex) {
        Logger.getLogger(produtoController.class.getName()).log(Level.SEVERE, null, ex);
    }[/code]

erro

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: org/apache/commons/io/output/DeferredFileOutputStream
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	controller.produtoController.doPost(produtoController.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

root cause

java.lang.ClassNotFoundException: org.apache.commons.io.output.DeferredFileOutputStream
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
	org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
	org.apache.commons.fileupload.disk.DiskFileItemFactory.createItem(DiskFileItemFactory.java:199)
	org.apache.commons.fileupload.FileUploadBase.parseRequest(FileUploadBase.java:361)
	org.apache.commons.fileupload.servlet.ServletFileUpload.parseRequest(ServletFileUpload.java:126)
	controller.produtoController.doPost(produtoController.java:98)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

Antes de tentar fazer o upload eu tentei salvar apenas o nome e descrição e funcionou, agora debuguei e percebi que as variáveis nome e descrição estão vindo como null também, não entendi o que o upload interfere nelas :? [/quote]

Putz, vi que naum tinha postado o erro e apertei sem querer no botão citar e naum em editar…shuahsuahsuahuhas

Pela exception vc precisa adicionar a biblioteca commons-io no seu classpath/projeto. Talvez precise de outras bibliotecas. Se ocorrer outros ‘java.lang.NoClassDefFoundError’, tente procurar em www.jarfinder.com a biblioteca da classe…

Sobre nome e descrição vindo null, vc precisa recuperar de outra forma neste caso. Utilize a forma que está no comentário:

if (item.isFormField()) { //Aqui ele verifica se é um field do seu form String name = item.getFieldName(); String value = item.getString(); }

só precisa verificar se name é igual a “nome” ou “descricao” e utilizar o value.

Eu adicionei a biblioteca commons-fileupload 1.2.2, pelo que pesquisei é só essa que precisa, ou tem mais alguma ??

Amigo tenta fazer o upload da foto separado dos outros campos. cria um form só para ele… da uma olhada na apostiva FJ28 da Caelum é gratuita e tem uma parte que fala sobre upload de imagens… vlw…

Mas eu queria que ficasse no mesmo form, tipo se eu colocar em outro vou ter que primeiro salvar o nome e descrição para depois salvar a imagem, fica ruim para o usuário daí. Dei uma olhada na apostila mas ela mostra como fazer junto com o vRaptor e eu não sei usar ele e não tenho muito tempo para aprender agora, então teria que ser sem ele.