java
  • jquery
  • html
  • ajax
  • servlets
  • 2014-02-09 19 views 0 likes 
    0

    我是servlet的新手。我試圖做的是使用servlet將文件上傳到我的服務器,同時發送一個文本值,這是文件名在服務器端更改。問題是我使用ajax post將表單數據提交給servlet,但在我的servlet中,我從request.getParameter中獲得了空值。在Servlet中獲取表單值

    這是我的html;

    $("#fileUp").html( "<form enctype='multipart/form-data' id='uploadForm' action='" + url + "/PrjHRService/FileUpload'>"+ 
             "<input name='file' id='file' type='file' size='50'>"+ 
             "<input name='fname' type='text' >"+ 
             "<input id='btnUpload' value='Upload' type='submit'>"+ 
             //"<div id='imgLink'></div>"+ 
             "</form>"); 
    

    這是我的jquery ajax調用服務器;

    $("#uploadForm").submit(function() {    
          var formData = new FormData($(this)[0]); 
          $.ajax({ 
            type: "POST", 
            url: $("#uploadForm").attr("action"), 
            data: formData, 
            async: false, 
            success: function(data) 
            { 
             if(data.res === "true"){ 
             jsi.showMsg("Uploaded Successfully"); 
             $("#imgLink").html("Uploaded Successfully"); 
             }else{ 
             jsi.showMsg("Error Uploading");  
             } 
            }, 
            contentType: false, 
            processData: false 
           }); 
    
          return false; // avoid to execute the actual submit of the form. 
         }); 
    

    這就是我如何從我的servlet中獲取表單的值;在那裏你會看到一行String fileExt = request.getParameter(「fname」);我發現fileExt爲空,這是我的問題。

    public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, java.io.IOException { 
         // Check that we have a file upload request 
         isMultipart = ServletFileUpload.isMultipartContent(request); 
         response.setContentType("application/json"); 
         String fileExt=request.getParameter("fname"); 
         java.io.PrintWriter out = response.getWriter(); 
         if(!isMultipart){ 
    
         JSONObject o=new JSONObject(); 
          try { 
          o.put("res", "false"); 
         } catch (JSONException e) { 
          // TODO Auto-generated catch block 
          e.printStackTrace(); 
         } 
          out.println(o.toString()); 
    
         return; 
         } 
         DiskFileItemFactory factory = new DiskFileItemFactory(); 
         // maximum size that will be stored in memory 
         factory.setSizeThreshold(maxMemSize); 
         // Location to save data that is larger than maxMemSize. 
         factory.setRepository(new File("c:\\temp")); 
    
         // Create a new file upload handler 
         ServletFileUpload upload = new ServletFileUpload(factory); 
         // maximum file size to be uploaded. 
         upload.setSizeMax(maxFileSize); 
    
         try{ 
         // Parse the request to get file items. 
         List fileItems = upload.parseRequest(request); 
    
         // Process the uploaded file items 
         Iterator i = fileItems.iterator(); 
         while (i.hasNext()) 
         { 
         FileItem fi = (FileItem)i.next(); 
         if (!fi.isFormField()) 
         { 
          // Get the uploaded file parameters 
          String fieldName = fi.getFieldName(); 
          String fileName = fi.getName(); 
          //String[] parts = fileName.split("."); 
          //fileName = parts[0] + "." + parts[1]; 
          String contentType = fi.getContentType(); 
          boolean isInMemory = fi.isInMemory(); 
          long sizeInBytes = fi.getSize(); 
          // Write the file 
          if(fileName.lastIndexOf("\\") >= 0){ 
           file = new File(filePath + 
           fileName.substring(fileName.lastIndexOf("\\"))) ; 
          }else{ 
           file = new File(filePath + 
           fileName.substring(fileName.lastIndexOf("\\")+1)) ; 
          } 
          fi.write(file) ; 
          JSONObject o=new JSONObject(); 
          o.put("res", "true"); 
          //out.println("Uploaded Filename: " + fileName + "<br>"); 
          out.println(o.toString()); 
          //out.println("Uploaded Successfully"); 
         } 
         } 
        /* out.println("</body>"); 
         out.println("</html>");*/ 
        }catch(Exception ex) { 
         System.out.println(ex); 
        } 
        } 
    

    回答

    2

    如果你要上傳的文件,<form/>method必須設置爲POST。然後,在服務器端,您需要從請求獲取輸入流並讀取數據---並且您需要在doPost方法(http://docs.oracle.com/javaee/6/api/javax/servlet/ServletRequest.html#getParameter%28java.lang.String%29)中執行此操作。當然,有很多這樣的庫,例如那些來自Apache。

    你必須記住,在使用POSTenctype="multipart/from-data"增加所有表單參數從enctype="application/x-www-form-urlencoded" POST主體,什麼是獨特的,其中的參數被連接請求URL(如所謂的QUERY_STRING)。方法getParameter僅適用於通過URL發送的參數。所以在你的情況下,你需要閱讀POST數據,解析它並找出fname的值。 POST可能看起來像這樣的:

    -----------------------------8022333619518 
    Content-Disposition: form-data; name="fname" 
    
    myfilename.txt 
    -----------------------------8022333619518 
    Content-Disposition: form-data; name="submit" 
    
    Send 
    -----------------------------8022333619518-- 
    

    如果您手動添加一些參數action URL,getParameter方法找到它。

    而且由於您沒有上傳任何文件(您是不是?),您可以將enctype="application/x-www-form-urlencoded"設置爲使用getParameter,因爲它將所有表單的輸入添加到URL。但是你的代碼表明,你稍後會上傳一個文件,所以它不適用於文件內容。

    當您使用ServletFileUpload來自Apache的,你可以看到parseParameterMap方法,獲取地圖,然後得到fname參數(它應該是名單上的第一個元素)爲FileItem,並得到了與getString內容。它應該是你在找什麼:

    Map<String, List<FileItem>> map = ServletFileUpload.parseParameterMap(request); 
    List<FileItem> list = map.get("fname"); 
    if (list != null && list.size() >= 1) { 
        FileItem item = list.get(0); 
        System.out.println("And the winner is... " + item.getString); 
    } 
    else { 
        System.out.println("Dammit! Still no luck!"); 
    } 
    
    +0

    兩者都是POST。我可以上傳文件,但我無法獲得文本輸入值「fname」。 – ksh

    +0

    你可以提供處理它的servlet的'doPost'方法嗎?另請查看我剛纔在答案中提供的文檔鏈接。 – Cromax

    +0

    我剛加了doPost方法。謝謝。 – ksh

    相關問題