Olha só, como eu estava fazendo, e funcionava perfeitamente.
Form<form action="mvc" method="post">
<input type="hidden" name="logica" value="AdicionaSistema"/>
Nome Sistema: <input type="text" name="nome" /> <br />
Descrição do Sistema: <input type="text" name="descricao" /><br />
Ativo? <input type=radio name="ativo" value="1"> Sim <input type=radio name="ativo" value="0"> Não<br></br>
Url <input type="text" name="url" /><br />
Imagem do Sistema <input type="file" name="imagem"/><br />
<input type="submit" value="Gravar" />
</form>
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.
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.
<form action="mvc" method="post" enctype="multipart/form-data">
Ai parou de funcionar.
Disseram que eu precisa tratar, os diferente.
Fiz as alterações.
enctype="multipart/form-data
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<FileItem> items = (List<FileItem>)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");
}
}
}
}
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<FileItem> items = (List<FileItem>)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.