我的观点是HTML5。我正在使用FormData对Servlet进行AJAX 2 POST。在servlet内部,我试图读取请求参数。我看不到任何参数。但是,Google Chrome Dev控制台会显示请求有效负载。如何在Servlet代码中获得相同的信息?任何帮助将不胜感激。这是代码。
JS代码
var xhr = new XMLHttpRequest(); var formData = new FormData(); formData.append('firstName', 'ABC'); formData.append('lastName', 'XYZ'); xhr.open("POST", targetLocation, true); xhr.send(formData);
Servlet代码(两个参数都返回null)
null
out.println("Hello! "+ request.getParameter("firstName")+ " "+ request.getParameter("lastName")+ ", thanks for sending your feedback." );
Google Chrome浏览器控制台
Content-Disposition: form-data; name="firstName" XYZ Content-Disposition: form-data; name="lastName" ABC
HTML5 FormDataAPI发送一个multipart/form- data请求。最初设计为能够使用新版本2通过ajax上传文件XMLHttpRequest。以前的版本无法上传文件。
FormData
multipart/form- data
XMLHttpRequest
在request.getParameter()默认情况下,承认application/x-www- form-urlencoded只有请求。但是您正在发送multipart/form- data请求。您需要用注释servlet类,@MultipartConfig以便可以通过来获取它们request.getParameter()。
request.getParameter()
application/x-www- form-urlencoded
@MultipartConfig
@WebServlet @MultipartConfig public class YourServlet extends HttpServlet {}
或者,当您仍未使用Servlet 3.0时,请使用Apache Commons FileUpload。
如果根本不需要上传文件,请改用“标准” XMLHttpRequest方法。
var xhr = new XMLHttpRequest(); var data = "firstName=" + encodeURIComponent(firstName) + "&lastName=" + encodeURIComponent(lastName); xhr.open("POST", targetLocation, true); xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded"); xhr.send(data);
这样,您就不再需要@MultipartConfigservlet。