前端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");

查看请求的访问头部

如下

前端XMLHttpRequest 发送请求 FormData后台接收不到数据,request.getParameter(),获取数据为null

发现数据请求格式和正常的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