Ver Mensaje Individual
  #7 (permalink)  
Antiguo 07/10/2011, 14:34
Avatar de jrevilla
jrevilla
 
Fecha de Ingreso: septiembre-2011
Ubicación: Lima, Peru, Peru
Mensajes: 51
Antigüedad: 12 años, 7 meses
Puntos: 2
De acuerdo Respuesta: Error con input "text","file" y servlets multipart form-data

Gracias Fuzzylog , despues de 1 desvelada total revisando como 20 tutoriales y foros , al fin pude encontrerle solucion!! =) ... lo voy a colocar aqui por que he visto q yo no soy el unico que sufrio con esto, lo podre para la posteridad jejeje ......


INDEX.JSP
Código HTML:
Ver original
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2.    pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <title>xD</title></HEAD>
  5. <center>
  6. <form method="POST" enctype='multipart/form-data' action="<%=request.getContextPath()%>/ServletSubir">
  7. <table border="2.0" cellpadding="2.0">
  8.     <tr>
  9.         <td>Nombres: </td>
  10.         <td><input type="text" name="txtNombres" /></td>
  11.     </tr>
  12.     <tr>
  13.         <td>Apellidos: </td>
  14.         <td><input type="text" name="txtApellidos" /></td>
  15.     </tr>
  16.     <tr>
  17.         <td>Direccion: </td>
  18.         <td><input type="text" name="txtDireccion" /></td>
  19.     </tr>
  20.     <tr>
  21.         <td>Telefono: </td>
  22.         <td><input type="text" name="txtTelefono" /></td>
  23.     </tr>
  24.     <tr>
  25.         <td>Subir imagen: </td>
  26.         <td><input type="file" name="uploadfile" /></td>
  27.     </tr>
  28.     <tr>
  29.         <td><input type="hidden" name="todo" value="upload"><input type="reset" value="clear"></td>
  30.         <td><input type="submit" value="Upload" /></td>
  31.     </tr>
  32. </form>
  33. </center>
  34. </BODY>
  35. </HTML>


SERVLET(lo comente segun entendi en varios tutoriales) :
Código Javascript:
Ver original
  1. package servlet;
  2.  
  3. import java.io.IOException;
  4. import java.util.Hashtable;
  5.  
  6. import javax.servlet.RequestDispatcher;
  7. import javax.servlet.ServletException;
  8. import javax.servlet.annotation.WebServlet;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12.  
  13. import javazoom.upload.MultipartFormDataRequest;
  14. import javazoom.upload.UploadBean;
  15. import javazoom.upload.UploadException;
  16. import javazoom.upload.UploadFile;
  17.  
  18.  
  19.  
  20.  
  21.  
  22. @WebServlet("/ServletSubir")
  23. public class ServletSubir extends HttpServlet {
  24.     private static final long serialVersionUID = 1L;
  25.        
  26.    
  27.     public ServletSubir() {
  28.         super();
  29.        
  30.     }
  31.  
  32.    
  33.     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  34.        
  35.     }
  36.  
  37.    
  38.     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  39.        
  40.             /**
  41.              * Declaramos MultipartFormDaaRequest por que un Request normal no trae los valores del input Text
  42.              * y tampoco trae la imagen.
  43.              */
  44.             MultipartFormDataRequest mrequest = null;
  45.            
  46.             RequestDispatcher dispatcher = null;
  47.             /**
  48.              * UploadBean es una libreria que se usa para poder llevar objetos al servidor en este caso
  49.              * la imagen.
  50.              */
  51.             UploadBean upBean = null;
  52.            
  53.             String nombres = null;
  54.             String apellidos = null;
  55.             String direccion = null;
  56.             String telefono = null;
  57.             String todo = null;
  58.             String imagen = null;
  59.            
  60.             try{
  61.             /**
  62.              * Aqui estamos confirmando el MultipartFormDataRequest y le indicamos que recoga todo lo que
  63.              * nos esta mandando el index.
  64.              */
  65.                 mrequest=   new MultipartFormDataRequest(request);
  66.                
  67.             if (mrequest != null) {
  68.                 todo = mrequest.getParameter("todo");
  69.             }
  70.             if ((todo != null) && (todo.equalsIgnoreCase("upload"))) {
  71.                 /**
  72.                  * Usamos un HashTable que es un directorio, se podria usar como una tabla pequeña.
  73.                  * mrequest.getFiles() = recoger todos los archivos de la imagen.
  74.                  */
  75.                 Hashtable files = mrequest.getFiles();
  76.                 if ((files != null) && (!files.isEmpty())) {
  77.                     /**
  78.                      * si UploadBean sirve para que podamos subir al servidor objetos, entonces
  79.                      * UploadFile sirve para poder subir Archivos al servidor.
  80.                      *
  81.                      * En este caso, al usar el comando GET, le estamos diciendo a lo que
  82.                      * tenga dentro de sus parentecis se vaya al objeto file, pero como
  83.                      * el objeto que obtenemos es de tipo Hashtable le colocamos un cast
  84.                      * para que podamos recuperar la informacion si problemas.
  85.                      */
  86.                     UploadFile file = (UploadFile) files.get("uploadfile");
  87.                    
  88.                    
  89.                     upBean = new UploadBean();
  90.                     upBean.setFolderstore("D:\\Imagenes\\");
  91.                     /**
  92.                      * Empezamos a utilizar el UploadBean y colocamos la opcion setFolderstore
  93.                      * para poder indicar en que direcion vamos a guarda todo archivo que nos mande.
  94.                      */
  95.                    
  96.                         upBean.store(mrequest, "uploadfile");
  97.                         /**
  98.                          * Con el Store le decimos al MultipartFormRequest que obtenta tambien la imagen.
  99.                          */
  100.                        
  101.                    
  102.                         if (file != null) {
  103.                             imagen = file.getFileName();
  104.                        
  105.                             request.setAttribute("imagen", "D:\\Imagenes\\"+imagen);
  106.                             request.setAttribute("nombre", imagen);
  107.                             request.setAttribute("tipo",file.getContentType() );
  108.                             request.setAttribute("tamanio", file.getFileSize());
  109.                            
  110.                         }
  111.                        
  112.                 } else {
  113.             System.out.println("<li>No uploaded files");
  114.                 }
  115.                 if (mrequest != null) {
  116.                     /**
  117.                      * Usamos el "mrequest" por que como dije al comienzo, el request normal no funciona
  118.                      * cuando usamos un FORM MULTIPART / FORM-DATA
  119.                      */
  120.                    
  121.                     nombres = mrequest.getParameter("txtNombres");
  122.                     apellidos = mrequest.getParameter("txtApellidos");
  123.                     direccion = mrequest.getParameter("txtDireccion");
  124.                     telefono = mrequest.getParameter("txtTelefono");
  125.                 }
  126.                
  127.                     request.setAttribute("txtNombres", nombres);
  128.                     request.setAttribute("txtApellidos", apellidos);
  129.                     request.setAttribute("txtDireccion", direccion);
  130.                     request.setAttribute("txtTelefono",telefono);
  131.                
  132.            
  133.                 dispatcher = getServletContext().getRequestDispatcher("/mensaje.jsp");
  134.        
  135.             }
  136.             }catch( UploadException exc){
  137.                 System.out.println("Error en lo primero: "+exc.getMessage());
  138.             }
  139.    
  140.             dispatcher.forward(request, response);
  141.     }
  142. }

MENSAJE.JSP
Código HTML:
Ver original
  1. <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
  2.     pageEncoding="ISO-8859-1"%>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
  4. <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
  5. <title>Mensaje</title>
  6. </head>
  7. <table border="2.0" cellpadding="3.0">
  8.     <tr>
  9.         <td colspan="2"><img src="<%=request.getAttribute("imagen")%>" /></td>
  10.     </tr>
  11.     <tr>
  12.         <td>nombre:</td>
  13.         <td><%=request.getAttribute("nombre")%></td>
  14.     </tr>
  15.     <tr>
  16.         <td>tipo:</td>
  17.         <td><%=request.getAttribute("tipo")%></td>
  18.     </tr>
  19.     <tr>
  20.         <td>tamaño:</td>
  21.         <td><%=request.getAttribute("tamanio")%> kb</td>
  22.     </tr>
  23. <br>
  24. <br>
  25.     <tr>
  26.         <td>Nombres:</td>
  27.         <td><%=request.getAttribute("txtNombres")%></td>
  28.     </tr>
  29.     <tr>
  30.         <td>Apellidos:</td>
  31.         <td><%=request.getAttribute("txtApellidos")%></td>
  32.     </tr>
  33.     <tr>
  34.         <td>Direccion:</td>
  35.         <td><%=request.getAttribute("txtDireccion")%></td>
  36.     </tr>
  37.     <tr>
  38.         <td>Telefono:</td>
  39.         <td><%=request.getAttribute("txtTelefono")%></td>
  40.     </tr>
  41. </body>
  42. </html>