2014-09-12 43 views
5

我在JSP上有一個webform,它有幾個字符串值和一個通過servlet上傳到服務器的文件。奇怪的是我能夠將文件上傳到服務器,但無法使用request.getParameter("someString")獲取servlet中的值。表單參數不通過,但處理相同的表單中的文件?

我的代碼有什麼問題,或指導我?

編輯: 有了一點研究,我已經知道,如果我在表單標籤使用enctype="multipart/form-data",我將無法使用request.getParameter()獲得在servlet的參數。現在的問題是,我怎樣才能將一個文件和其他值發送到一個servlet進行處理。

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> 

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

我不認爲這有可能是與映射的問題,但我稍微困惑這個也是因爲我的web.xml未顯示任何映射或servlet。該servlet會,然而,上傳文件並返回以下輸出:

Hello Servlet Get 

null null 

回答

4

你是正確的,你不能再在這種情況下使用request.getParameter()與多形式。 FileUpload通過FileItem類提供對非文件表單字段的訪問。在迭代項目時,根據要查找的名稱檢查字段名稱。

... 
    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(); 
    } 
相關問題