2014-09-12 6 views
5

Ich habe ein Webformular auf JSP, das mehrere Zeichenfolgenwerte und eine Datei enthält, die über ein Servlet auf den Server hochgeladen wird. Es ist seltsam zu sehen, dass ich die Datei auf den Server hochladen kann, aber nicht die Werte im Servlet unter Verwendung von abrufen kann.Formularparameter nicht übergeben, aber Datei in derselben Form verarbeitet?

Was ist das Problem mit meinem Code, oder führen Sie mich?

EDIT: Mit ein wenig Forschung, ich bin gekommen, zu wissen, dass, wenn ich enctype="multipart/form-data" in Form-Tag verwenden, werde ich nicht in der Lage sein request.getParameter() zu bekommen Parameter in Servlet verwenden. Die Frage könnte jetzt sein, wie kann ich sowohl eine Datei als auch andere Werte an ein Servlet zur Verarbeitung senden.

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> 

Und 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."); 
    } 

Ich glaube nicht, könnte es ein Problem mit der Zuordnung, aber ich bin ein wenig verwirrt darüber auch, weil meine web.xml keine Zuordnung oder Servlet zeigt. Das Servlet würde jedoch laden Sie die Datei und gibt die folgende Ausgabe:

Hello Servlet Get 

null null 

Antwort

4

Sie richtig sind, dass Sie nicht mehr request.getParameter() in dieser Situation mit der mehrteiligen Form nutzen können. FileUpload bietet Zugriff auf Ihre Nicht-Datei-Formularfelder über die Klasse FileItem. Wenn Sie über die Elemente iterieren, überprüfen Sie die Feldnamen anhand der gesuchten Namen.

... 
    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(); 
    } 
Verwandte Themen