2014-09-12 7 views
5

Ho un modulo web su JSP che ha diversi valori di stringa e un file da caricare sul server attraverso un servlet. È strano vedere che sono in grado di caricare il file sul server ma non in grado di ottenere i valori nel servlet usando request.getParameter("someString").I parametri del modulo non passano ma viene elaborato il file nello stesso formato?

Qual è il problema con il mio codice o guidami?

EDIT: Con un po 'di ricerca, sono venuto a sapere che se io uso enctype="multipart/form-data" nel tag form, non sarò in grado di ottenere i parametri in servlet utilizzando request.getParameter(). La domanda potrebbe essere ora, come posso inviare sia un file che altri valori a un servlet per l'elaborazione.

webform.jsp:

<form method="POST" enctype="multipart/form-data" action="/cassino/uploadFile" > 
    <fieldset> 
      <div class="form-group"> 
       <label >*ID riparazione</label> 

        <input type="text" name="idRiparazione" /> 
      </div> 
      <div class="form-group"> 
       <label>*ID mandrino smontato</label> 

        <input type="text" name="idMandrinoSmontato" /> 
      </div> 
      <div class="form-group"> 
       <label>*Service livello(SL)</label> 
       <input type="text" name="serviceLivello" /> 
      </div> 
       <div class="form-group"> 
       <label>Attachment</label> 
        <input type="file" name="attachment" class="" id="attach" /> 
       </div> 
      </fieldset> 
     </div> 
     <p class="text-right"> 
      <input type="submit" value="Salva" name="newMacchina" /> 
      <input type="reset" value="Cancella" /> 
     </p> 
    </form> 

E uploadFile.java

@WebServlet(name = "uploadFile", urlPatterns = { "/uploadFile" }) 
public class uploadFile extends HttpServlet { 
    private static final long serialVersionUID = 1L; 

    private static final int THRESHOLD_SIZE = 1024 * 1024 * 3; 
    private static final int MAX_FILE_SIZE = 1024 * 1024 * 15; 
    private static final int MAX_REQUEST_SIZE = 1024 * 1024 * 20; 

    /** 
    * handles file upload via HTTP POST method 
    */ 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 

     // checks if the request actually contains upload file 
     //ServletFileUpload.isMultipartContent(request); 

     String idRiparazione = request.getParameter("idRiparazione"); 
     String idMandrinoSmontato = request.getParameter("idMandrinoSmontato"); 
     String serviceLivello = request.getParameter("serviceLivello"); 

     PrintWriter out = response.getWriter(); 
     out.println("<html>"); 
     out.println("<body>"); 
     out.println("<h1>Hello Servlet Get</h1>"); 
     out.println(idMandrinoSmontato); 
     out.println(serviceLivello); 
     out.println("</body>"); 
     out.println("</html>"); 

     DiskFileItemFactory factory = new DiskFileItemFactory(); 
     factory.setSizeThreshold(THRESHOLD_SIZE); 
     factory.setRepository(new File(System.getProperty("java.io.tmpdir"))); 

     ServletFileUpload upload = new ServletFileUpload(factory); 
     upload.setFileSizeMax(MAX_FILE_SIZE); 
     upload.setSizeMax(MAX_REQUEST_SIZE); 

     // constructs the directory path to store upload file 
     String uploadPath = "C:\\SKFSFCassino\\uploads\\riparazione\\"; //getServletContext().getRealPath("") + File.separator + UPLOAD_DIRECTORY; 
     // creates the directory if it does not exist 
     File uploaddir = new File(uploadPath); 
     if(!uploaddir.exists()) { 
      uploaddir.mkdirs(); 
     } 

     try { 
      List formItems = upload.parseRequest(request); 
      Iterator it = formItems.iterator(); 
      // iterates over form's fields 
      while(it.hasNext()) { 
       FileItem item = (FileItem) it.next(); 
       // processes only fields that are not form fields 
       if (!item.isFormField()) { 
        String fileName = new File(item.getName()).getName(); 
        String filePath = uploadPath + File.separator + fileName; 
        File storeFile = new File(filePath); 
        // saves the file on disk 
        item.write(storeFile); 
       } 
      } 
     } catch (FileUploadException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 

     // response.sendRedirect(request.getContextPath()+"/modules/SKFsfRepair/new/viewNewContent.jsp"); 

    } 

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { 
     throw new ServletException("GET method used with " + getClass().getName() + ": POST method required."); 
    } 

Non credo che ci potrebbe essere un problema con la mappatura, ma io sono un po 'confuso su questo anche perché il mio web.xml non mostra alcuna mappatura o servlet. Il servlet sarebbe, tuttavia, caricare il file e restituire il seguente output:

Hello Servlet Get 

null null 

risposta

4

Sei corretto che non è più possibile utilizzare request.getParameter() in questa situazione con la forma più parti. FileUpload fornisce l'accesso ai campi del modulo non file tramite la classe FileItem. Mentre esegui l'iterazione sugli oggetti, controlla i nomi dei campi in base ai nomi che stai cercando.

... 
    String idRiparazione = null; 
    String idMandrinoSmontato = null; 
    String serviceLivello = null; 

    try { 
     List formItems = upload.parseRequest(request); 
     Iterator it = formItems.iterator(); 
     // iterates over form's fields 
     while(it.hasNext()) { 
      FileItem item = (FileItem) it.next(); 
      // processes only fields that are not form fields 
      if (!item.isFormField()) { 
       String fileName = new File(item.getName()).getName(); 
       String filePath = uploadPath + File.separator + fileName; 
       File storeFile = new File(filePath); 
       // saves the file on disk 
       item.write(storeFile); 
      } 
      else 
      { 
       if ("idRiparazione".equals(item.getFieldName())) 
        idRiparazione = item.getString(); 
       else if ("idMandrinoSmontato".equals(item.getFieldName())) 
        idMandrinoSmontato = item.getString(); 
       else if ("serviceLivello".equals(item.getFieldName())) 
        serviceLivello = item.getString(); 
      } 
     } 

     PrintWriter out = response.getWriter(); 
     out.println("<html>"); 
     out.println("<body>"); 
     out.println("<h1>Hello Servlet Get</h1>"); 
     out.println(idMandrinoSmontato); 
     out.println(serviceLivello); 
     out.println("</body>"); 
     out.println("</html>");    
    } catch (FileUploadException e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    }