1. 程式人生 > >前端XMLHttpRequest 傳送請求 FormData後臺接收不到資料,request.getParameter(),獲取資料為null

前端XMLHttpRequest 傳送請求 FormData後臺接收不到資料,request.getParameter(),獲取資料為null

        var form = new FormData();
        form.append("fName",$("#fName").val());
        form.append("fPrice",$("#fPrice").val());
        form.append("fType",$("#fType").val());
        form.append("fDescription",$("#fDescription").val());
        form.append("files",files[0]);

        var xmlhttp;
        if (window.XMLHttpRequest){
          // IE7+, Firefox, Chrome, Opera, Safari 瀏覽器執行程式碼
          xmlhttp=new XMLHttpRequest();
        }
        else{
          // IE6, IE5 瀏覽器執行程式碼
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange=function(){
          if (xmlhttp.readyState==4 && xmlhttp.status==200)
          {
            document.getElementById("myDiv").innerHTML=xmlhttp.responseText;
          }
        }
        xmlhttp.open("POST",url,true);
        xmlhttp.send(form);

這個程式碼,後端一直收不到資料,String fName=request.getParameter("fName");

檢視請求的訪問頭部

如下

發現數據請求格式和正常的httlp請求不一樣,所以收不到資料。這就涉及到tomcat解析http請求格式的知識,這裡不做深入,只講講解怎麼收到資料。需要引入兩個jar包就好,必須兩個同時引用。

<!-- https://mvnrepository.com/artifact/commons-fileupload/commons-fileupload -->
	<dependency>
	    <groupId>commons-fileupload</groupId>
	    <artifactId>commons-fileupload</artifactId>
	    <version>1.2.1</version>
	</dependency>
	
	<!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
	<dependency>
	    <groupId>commons-io</groupId>
	    <artifactId>commons-io</artifactId>
	    <version>2.4</version>
	</dependency>

 這樣就行了,具體原理的話,我查的資料是,主要是伺服器解析請求頭部根據

Content-Type: multipart/form-data;

的不同,而解析方式不同,我們需要自己處理接受http傳送過來的資料,不過apache已經為我們封裝好了方法,就在引用的jar包中,(突然感覺世界沒號了很多),之後我們就可以獲取資料了。我們普通的請求頭部型別為

Content-Type: application/x-www-form-urlencoded; 

差點忘了一點,這是運用springMVC上傳檔案用的,所以需要在spring中註冊bean,重點啊,不然那兩個jar包就沒用處了

<bean id="multipartResolver"  
        class="org.springframework.web.multipart.commons.CommonsMultipartResolver">  
        <!-- 上傳檔案大小上限,單位為位元組(10MB) -->
        <property name="maxUploadSize">  
            <value>10485760</value>  
        </property>  
        <!-- 請求的編碼格式,必須和jSP的pageEncoding屬性一致,以便正確讀取表單的內容,預設為ISO-8859-1 -->
        <property name="defaultEncoding">
            <value>UTF-8</value>
        </property>
    </bean>

參考地址:https://www.cnblogs.com/WJ-163/p/6269409.html