Servlet - parametro enctype="multipart/form-data

0 respostas
101574

Olha só, como eu estava fazendo, e funcionava perfeitamente.

Form
<form action="mvc" method="post">
<input type="hidden" name="logica" value="AdicionaSistema"/>
Nome Sistema: &lt;input type="text" name="nome" /&gt; <br />
Descrição do Sistema: &lt;input type="text" name="descricao" /&gt;<br />
Ativo? &lt;input type=radio name="ativo" value="1"&gt; Sim   &lt;input type=radio name="ativo" value="0"&gt; Não<br></br>
Url &lt;input type="text" name="url" /&gt;<br />
Imagem do Sistema &lt;input type="file" name="imagem"/&gt;<br />
&lt;input type="submit" value="Gravar" /&gt;
&lt;/form&gt;
O meu form, envia para o mvc. A classe ControlSerlvet mapeada. Classe ControlSerlvet.
public class ControllerServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,
	IOException{
		String parametro = request.getParameter("logica");
		String nomeDaClasse = "br.com.softsolweb.servlet."+parametro;
		try{
			Class classe = Class.forName(nomeDaClasse);
			
			Logica logica = (Logica) classe.newInstance();
			logica.executa(request, response);
		}catch (Exception e){
			throw new ServletException("A lógica de negócios causou uma exceção ",e);
			}
		}
	}

Ela recebia do form, a classe que devia chamar.
Com isso, eu tinha apenas um mapeamento.

Agora minha classe AdicionaSistema.
public class AdicionaSistema implements Logica{
	
		public void executa(HttpServletRequest request, HttpServletResponse response)
				throws Exception {
			
			Sistemas sistemas = new Sistemas();
			//montando o objeto
			sistemas.setNome(request.getParameter("nome"));
			sistemas.setAtivo(request.getParameter("ativo"));
			sistemas.setDescricao(request.getParameter("descricao"));
			sistemas.setImagem(request.getParameter("imagem"));
			sistemas.setUrl(request.getParameter("url"));
			
			//DAO
			SistemasDAO dao = new SistemasDAO();
			dao.adiciona(sistemas);
			RequestDispatcher rd = request.getRequestDispatcher("/sucesso/adicionadosucesso.jsp");
			rd.forward(request, response);
			
		}

	}

Está funcionando corretamente.
Só que eu recebia somente o nome da imagem. Não recebia a imagem em si.

Ai eu mudei o meu form para.

&lt;form action="mvc" method="post" enctype="multipart/form-data"&gt;

Ai parou de funcionar.
Disseram que eu precisa tratar, os diferente.
Fiz as alterações.

No meu form, somente
enctype="multipart/form-data
Na minha mvc. Eu deixei ela assim.
public class ControllerServlet extends HttpServlet{
	
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,
	IOException{
		boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			        if(isMultipart) {
			            try {
			                FileItemFactory factory = new DiskFileItemFactory();
			                ServletFileUpload upload = new ServletFileUpload(factory);
			                List&lt;FileItem&gt; items = (List&lt;FileItem&gt;)upload.parseRequest(request);
			                for(FileItem item : items) {
			                    if(item.isFormField()) {
			                        //se for um campo normal de form
			                        
			                        String parametro = item.getString();
			                        String nomeDaClasse = "br.com.softsolweb.servlet."+ parametro;
			                		try{
			                			Class classe = Class.forName(nomeDaClasse);
			                			
			                			Logica logica = (Logica) classe.newInstance();
			                			logica.executa(request, response);
			                		}catch (Exception e){
			                			throw new ServletException("A lógica de negócios causou uma exceção ",e);
			                			}
			                    }
			                }
			            } catch (FileUploadException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}finally{
			            	System.out.println("finally");
			            }
			        }
	}
}
E minha ServelAdicionaSistema.
public class AdicionaSistema implements Logica{
	
		public void executa(HttpServletRequest request, HttpServletResponse response)
				throws Exception {
			
			Sistemas sistemas = new Sistemas();
			//montando o objeto
			 boolean isMultipart = ServletFileUpload.isMultipartContent(request);
			 	        if(isMultipart) {
			 	            try {
			 	                FileItemFactory factory = new DiskFileItemFactory();
			 	                ServletFileUpload upload = new ServletFileUpload(factory);
			 	                List&lt;FileItem&gt; items = (List&lt;FileItem&gt;)upload.parseRequest(request);
			 	                for(FileItem item : items) {
			 	                    sistemas.setNome(item.getFieldName());
			 	           			sistemas.setDescricao(item.getFieldName());
			 	           			sistemas.setAtivo(item.getFieldName());
			           				sistemas.setUrl(item.getFieldName());
			           				//imagem
	 	                         File uploadedFile = new File("/home/kde/file/"+new Date().getTime()+"_"+item.getName());
			 		                	 item.write(uploadedFile);
			 		                	 System.out.println("Nome do arquivo: " + item.getName() + " -  "  + item.getSize() + "bytes");
			 		                	 sistemas.setImagem(item.getName());
			 		                	//DAO
			 		       			SistemasDAO dao = new SistemasDAO();
			 		       			dao.adiciona(sistemas);
			 		       			RequestDispatcher rd = request.getRequestDispatcher("/sucesso/adicionadosucesso.jsp");
			 		       			rd.forward(request, response);
			 	            }
			 	}finally{
			 	
		}

		}
}
}

Não funciona.
Qual a forma correta de se fazer isso?
Porque, minha aplicação estava funcionando corretamente. E agora não.
Porcausa de uma imagem, tive que mudar tanta coisa e não funciona mais.rsrs.

Grato.

Criado 22 de agosto de 2012
Respostas 0
Participantes 1